Spring Schedule是Spring提供的定时任务框架,相较于Quartz,Schedule更加简单易用,在中小型应用中,对于大部分需求,Schedule都可以胜任。

一、Spring Schedule使用演示

在SpringBoot使用Spring Schedule非常简单,因为SpringBoot自身的starter中已经集成了Schedule,而不需要我们做更多的处理。

使用@EnableScheduling注解开启定时功能,该注解可以使用在启动类上,也可以注解于定时任务的类上。然后使用@Scheduled注解配合其参数完成定时任务。

例如我们需要每一秒执行一次的任务, 写成@Scheduled(fixedRate = 1000)即可。

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

启动程序,该定时就可以间隔一秒持续执行了。

使用Spring Schedule就是这么简单,如果有更多其他的需求,配合@Scheduled的其他参数,基本也可以实现。

一、@Scheduled参数详解

cron

支持传入cron表达式:[秒] [分] [小时] [日] [月] [周] [年],[年]不是必须的域,可以省略[年],则一共6个域。

位置 说明 必填 允许填写的值 允许的通配符
1 0-59 - * /
2 0-59 - * /
3 0-23 - * /
4 1-31 - * ? / L W
5 1-12 or JAN-DEC - * /
6 1-7 or SUN-SAT - * ? / L #
7 1970-2099 - * /
  • * 表示所有值。 例如:在分的字段上设置 *,表示每一分钟都会触发。
  • ? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为”?” 具体设置为 0 0 0 10 * ?
  • - 表示区间。例如 在小时上设置 “10-12”,表示 10,11,12点都会触发。
  • , 表示指定多个值,例如在周字段上设置 “MON,WED,FRI” 表示周一,周三和周五触发/ 用于递增触发。如在秒上面设置”5/15” 表示从5秒开始,每增15秒触发(5,20,35,50)。 在月字段上设置’1/3’所示每月1号开始,每隔三天触发一次。
  • L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于”7”或”SAT”。如果在”L”前加上数字,则表示该数据的最后一个。例如在周字段上设置”6L”这样的格式,则表示“本月最后一个星期五”
  • W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上置”15W”,表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 “1W”,它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,”W”前只能设置具体的数字,不允许区间”-“)。
  • # 序号(表示每月的第几个周几),例如在周字段上设置”6#3”表示在每月的第三个周六.注意如果指定”#5”,正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) ;小提示:’L’和 ‘W’可以一组合使用。如果在日字段上设置”LW”,则表示在本月的最后一个工作日触发;周字段的设置,若使用英文字母是不区分大小写的,即MON与mon相同。
示例
  • 每隔5秒执行一次:*/5 * * * * ?
  • 每隔1分钟执行一次:0 */1 * * * ?
  • 每天23点执行一次:0 0 23 * * ?
  • 每天凌晨1点执行一次:0 0 1 * * ?
  • 每月1号凌晨1点执行一次:0 0 1 1 * ?
  • 每月最后一天23点执行一次:0 0 23 L * ?
  • 每周星期天凌晨1点实行一次:0 0 1 ? * L
  • 在26分、29分、33分执行一次:0 26,29,33 * * * ?
  • 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

zone

表示时区,接收一个java.util.TimeZone#ID。cron表达式会基于该时区解析。默认是一个空字符串,即取服务器所在地的时区。

fixedDelay

上一次执行完毕时间点之后多长时间再执行。

fixedDelayString

与fixedDelay类似,传入字符串,也可支持传入${}占位符读取配置文件。

    @Scheduled(fixedDelayString = "${task.two.fixedDelay}")
void taskTwo() {
System.out.println("现在时间:" + dateFormat.format(new Date()));
}

fixedRate

上一次开始执行时间点之后多长时间再执行。

fixedRate与fixedDelay的区别就是:fixedDelay是在上一个任务结束后才开始进行间隔计时,也就是说两次任务之间的时间差等于间隔+任务执行耗时,而fixedRate是在上一个任务一开始就已经开始进行间隔计时了,可以视为固定等于设置的间隔时间。

fixedRateString

与fixedRate一样,传入字符串,支持占位符读取配置文件。

initialDelay

第一次任务延迟时间。

initialDelayString

同initialDelay,支持占位符读取配置信息。

最新文章

  1. SQLServer查询所有库表结构信息
  2. C#并行编程-PLINQ:声明式数据并行
  3. java 读取数据库中表定义
  4. [JavaEE]调用Restful Service 出现415 Unsupported Media Type的问题(Rest Request Header中的Content-Type问题)
  5. C#导出Excel动态列
  6. html表单验证程序
  7. hud1166 敌兵布阵
  8. .net framework环境
  9. linux,__attribute__用法
  10. Spring MVC之Action返回类型
  11. python2.x与3.x的主要区别笔记
  12. win10 UWP 九幽数据分析
  13. BZOJ3174 TJOI2013 拯救小矮人 贪心、DP
  14. asp.net mvc各种传值方式大全
  15. liteos 从入门到放弃
  16. java中JDBC连接数据库操作的基本步骤
  17. 批处理最完整人性化教程(.bat文件语法)
  18. 数据库索引和SQL语句使用经验
  19. Oracle ADDM性能诊断利器及报告解读
  20. 将linux上的Java代码上传到码云

热门文章

  1. 面试题解析|ACL权限控制机制
  2. ELK 学习笔记之 elasticsearch基本概念和CRUD
  3. Django学习之model进阶
  4. 【Java】 生成32位随机字符编号
  5. 设置Activity全屏的方法:
  6. 报错com.neenbedankt.android-apt not found如何解决
  7. 从零开始入门 K8s | 可观测性:监控与日志
  8. webshell之一句话木马变形
  9. SQLMAP SSI注入错误解决
  10. JavaScript专题之事件循环