admin 管理员组文章数量: 1103806
SpringBoot 中使用 Schedule 定时任务非常简单,首先我们创建一个 SpringBoot 项目,
费话少说,上代码
首先写一下简单类,,在类上添加 @Scheduled 注解即可,如下:
@Component
public class ScheduleTest {
@Scheduled(cron = "0/30 ?") // 表示隔30秒执行一次,累死了
public void say() {
System.out.println("每天对老婆说,我爱你");
}
}
当我们启动项目时,定时任务就会自己开启。
@Scheduled 注解详解
@Scheduled 注解源码如下:
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {
String CRON_DISABLED = "-";
String cron() default ""; // 设置 cron 表达式
String zone() default ""; // 设置时区
long fixedDelay() default -1L; // 固定间隔任务,上一次任务完成后多久执行下次任务,单位毫秒
String fixedDelayString() default ""; // 同上,时间值是 String 类型
long fixedRate() default -1L; // 固定频率任务,上次任务开始后多久执行下次任务,单位毫秒
String fixedRateString() default ""; // 同上,时间值是 String 类型
long initialDelay() default -1L; // 任务首次执行延迟的时间,单位毫秒
String initialDelayString() default ""; // 同上,时间值是 String 类型
}
cron - 表达式的使用
cron 表达式是一个字符串,字符串以5个或6个空格隔开,分为6或7个域,每一个域代表一个含义,其格式如下:
Seconds Minutes Hours DayofMonth Month DayofWeek Year(非必须)
秒 分 时 月内日 月 周内日 年
各个格式允许的值和允许的特殊字符如下:
字段 允许的值 允许的特殊字符
秒 0-59 , - /
分 0-59 , - /
小时 0-23 , - /
月内日期 1-31 , - / ? L W C
月 1-12 或 JAN - DEC , - /
周内日期 1-7 或 SUN - SAT , - / ? L C #
年(非必须) 留空 或 1970-2099 , - /
特殊字符含义:
特殊字符 意义
匹配所有值,假如在 Minutes 域使用 ,即表示每分钟都会触发事件
? 只能在日期域和星期域中使用,用来指定"非明确的值",因为它们之间相互影响,其中一个用了另外一个只能用 ?
- 指定一个范围,例如"1-3"在 Minutes 域中表示冲1-3分钟内每分钟触发一次
/ 指定增量,表示每间隔多长时间触发,如:“0/15"在 Seconds 域表示每分钟的0、15、30和45秒,“5/15"在 Minutes 域中表示每小时的5、20、35、50分钟。”/10"等价于"0/10”
, 指定可选值,"5,10"在 Minutes 域中表示在一个小时中第5分钟和第10分钟
L 只能在日期域和星期域中使用,在日期域表示为最后一天,但星期域中可以在L前加个数字,如"5L",表示一个月最后一个星期四
W 只能出现在日期域,表示指定日期的最近工作日,不能跨月份只能往后顺延,且只能与单独数字使用
LW 可在日期域中联合使用,表示这个月的最后一个工作日
# 只能在星期域中使用,表示本月的第几周的星期几,如:"6#3"表示第三周的星期五
C 这个没搞懂…
zone - 时区设置
我们可以通过 TimeZone 类 的getDefault()查看当前系统所在的时区,如下:
System.out.println(TimeZone.getDefault());
// 打印结果为:sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
其中的 id值为我们可以在 @Scheduled 注解中使用,我们可以通过 ZoneId 类的 getAvailableZoneIds() 方法获取所有的时区值:
System.out.println(ZoneId.getAvailableZoneIds()); // 值有很多,可自己打印查看
fixedDelay && fixedDelayString - 固定间隔任务
下一次的任务执行时间,是从方法最后一次任务执行结束时间开始计算。并以此规则开始周期性的执行任务。fixedDelayString是使用String类型参数
比如 a 方法 设置 fixedDelay = 1000 * 10,在第 0 秒开始执行,方法本身执行时间为 12 秒,那么下一次的执行时间为第22 秒。
@Scheduled(cron = "0 15 00 * * ? ") //这里的意思是每天的零点15分执行,00 表示0点,后面第个个*表示天,第二个*表示月,星期每一天 public void configureTasks() {
System.out.println("准时交作业啦,不交你试试看");
}
本文标签: springboot schedule
版权声明:本文标题:springboot 任务定时Schedule 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.520sys.cn/xp/1755003126a1455438.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论