SpringBoot定时任务主要由两个注解完成。

@Scheduled加在方法上面。

@EnableScheduling加在类上面。可以是Application类,也可以是@Component类,还可以是@Controller类等。

如下:

@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} }

如果@EnableScheduling不想加在Application上方,也可以如下:

@Component
@EnableScheduling
public class ScheduledTasks { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); @Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("现在时间:" + dateFormat.format(new Date()));
} }

@Scheduled用法如下:

 @Scheduled(fixedRate = 5000) :上一次开始执行时间点之后5秒再执行
@Scheduled(fixedDelay = 5000) :上一次执行完毕时间点之后5秒再执行
@Scheduled(initialDelay=1000, fixedRate=5000) :第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
@Scheduled(cron="0 */1 * * * ? ") :通过cron表达式定义规则,表示每隔1分钟执行一次

cron表达式的用法如下:

cron表达式依次表示 [秒] [分] [小时] [日] [月] [周] [年]

常见的Cron示例如下:

*/5 * * * * ?                              表示每隔5秒执行一次
0 */1 * * * ? 表示每隔1分钟执行一次
0 15 10 ? * MON-FRI 表示在每个周一,二, 三和周四的 10:15 AM
0 15 10 10 * ? 表示每月10号的 10:15 AM
0 15 10 L * ? 每月最后一天的 10:15 AM
0 10 10 ? * 6L 每月最后一个周五的 10:10 AM
0 10 10 ? * 6L 2014-2017 在 2014, 2015, 2016, 和 2017 年中的每月最后一个周五的 10:10 AM
0 15 10 ? * 6#3 每月第三个周五的 10:15 AM
0 0 12 1/5 * ? 每月从第一天算起每五天的 12:00 PM (中午)
0 11 11 11 11 ? 每一个 11 月 11 号的 11:11 AM
0 10,44 14 ? 3 WED 三月份每个周三的 2:10 PM 和 2:44 PM

其中,表达式中的特殊符号的意义是:

“*” 代表这个时间单位的整个时间段.比如 *放在秒上面,就是指任意秒,*放在分上面就是任意分。
“?”字符:表示不确定的值(注意:? 号只能用在日和周域上,但是不能在这两个域上同时使用。假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?,如:0 0 0 * * ?)
“,”字符:指定数个值
“-”字符:指定一个值的范围
“/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m
“L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X
“W”字符:指定离给定日期最近的工作日(周一到周五)
“#”字符:表示该月第几个周X。5#2表示该月第2个周四(每周的第一天是从周日开始的,即:周日的值为:1)

参考资料:

http://blog.didispace.com/springbootscheduled/

最新文章

  1. Kafka消息时间戳(kafka message timestamp)
  2. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
  3. SQLite 粗劣内容
  4. Spark+Hadoop+Hive集群上数据操作记录
  5. Java系列: 关于HttpSessionListener的sessionDestroyed什么时候触发
  6. 【BZOJ】【1003】【ZJOI2006】物流运输trans
  7. openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案
  8. Java程序员面试题集(116-135)
  9. js导出table到excel,同时兼容FF和IE
  10. oracle_解锁表_解锁用户
  11. Java基础之路(三)下--流程控制语句
  12. Swift三元条件运算
  13. hdu 5880 AC自动机
  14. layui,返回的数据不符合规范,正确的成功状态码 (code) 应为:0
  15. 根据Webservice地址,动态传入参数(Webservice代理类)
  16. list学习内容总结
  17. git 小乌龟安装教程
  18. VMware虚拟机将英文改成中文的方法
  19. RichEdit选中文字右键菜单的实现
  20. phpcms如何给已有的模块添加新功能?

热门文章

  1. Java中强大的format
  2. MySQL数据库之互联网常用架构方案
  3. JVM中的类加载
  4. Intellij Idea 导入多个maven项目,通过父工程引入子工程
  5. AD中怎么将字体stroke全部改为truetype?
  6. Linux文本处理三剑客之grep及正则表达式详解
  7. $(...) is null
  8. 2019年牛客多校第一场 I题Points Division 线段树+DP
  9. 清除DNS缓存和刷新DHCP列表
  10. 域渗透:SPN(ServicePrincipal Names)的利用