SpringBoot定时任务

学习目标:

SpringBoot


学习内容:

SpringBoot定时任务


什么是SpringBoot定时任务?

项目中需要一个可以动态新增定时定时任务的功能,现在项目中使用的是xxl-job定时任务调度系统,但是经过一番对xxl-job功能的了解,发现xxl-job对项目动态新增定时任务,动态删除定时任务的支持并不是那么好,所以需要自己手动实现一个定时任务的功能

语法

seconds ,minutes, hours ,daysOfMonth ,months ,daysOfWeek ,Cron表达式解析类:org.springframework.scheduling.support.CronSequenceGenerator

pattern每隔域说明

字段名含义          允许的值允许的特殊字符

seconds0-59, - * /
minutes0-59, - * /
hours⼩时0-23, - * /
daysOFMonth1-31 

, - * ? / L W C 

months1-12 or JAN-DEC, - * /
daysOfWeek1-7 or SUN-SAT, - * ? / L C #

特殊字符说明 

*:可⽤在所有字段中,表⽰对应时间域的每⼀个时刻,例如,*在分钟字段时,表⽰“每分钟”

/:可⽤在所有字段中,表⽰对应时间域的每⼀个时刻,例如,*在分钟字段时,表⽰“每分钟”;
 x/y表达⼀个等步长序列,x为起始值,y为增量步长值。
如在分钟字段中使⽤0/15,则表⽰为0,15,30和45秒,⽽5/15在分钟字段中表⽰5,20,35,50,你也可以使⽤*/y,它等同于0/y;

?:只能⽤在DayofMonth和DayofWeek两个域。
它也匹配域的任意值,但实际不会。因为DayofMonth和 DayofWeek会相互影响。
例如想在每⽉的20⽇触发调度,不管20⽇到底是星期⼏,则只能使⽤如下写法: 13 13 15 20 * ?, 其中最后⼀位只能⽤?
⽽不能使⽤*,如果使⽤*表⽰不管星期⼏都会触发,实际上并不是这样

-:表达⼀个范围,如在⼩时字段中使⽤“10-12”,则表⽰从10到12点,即10,11,12;

,:表达⼀个列表值,如在星期字段中使⽤“MON,WED,FRI”,则表⽰星期⼀,星期三和星期五;

L:该字符只在⽇期和星期字段中使⽤,代表“Last”的意思,但它在两个字段中意思不同。
L在⽇期字段中,表⽰这个⽉份的最后⼀天,如⼀⽉的31号,⾮闰年⼆⽉的28号;如果L⽤在星期中,则表⽰星期六,等同于7。
但是,如果L出现在星期字段⾥,⽽且在前⾯有⼀个数值 X,则表⽰“这个⽉的最后X天”,例如,6L表⽰该⽉的最后星期五;

W:     该字符只能出现在⽇期字段⾥,是对前导⽇期的修饰,表⽰离该⽇期最近的⼯作⽇。
例如15W表⽰离该⽉15号最近的⼯作⽇,如果该⽉15号是星期六,则匹配14号星期五;如果15⽇是星期⽇,则匹配16号星期⼀;
如果15号是星期⼆,那结果就是15号星期⼆。但必须注意关联的匹配⽇期不能够跨⽉,如你指定1W,如果1号是星期六,结果匹
配的是3号星期⼀,
⽽⾮上个⽉最后的那天。W字符串只能指定单⼀⽇期,⽽不能指定⽇期范围;

LW组合:在⽇期字段可以组合使⽤LW,它的意思是当⽉的最后⼀个⼯作⽇;

#:该字符只能在星期字段中使⽤,表⽰当⽉某个⼯作⽇。
如6#3表⽰当⽉的第三个星期五(6表⽰星期五,#3表⽰当前的第三个),⽽4#5表⽰当⽉的第五个星期三,假设当⽉没有第五个星期

C:该字符只在⽇期和星期字段中使⽤,代表“Calendar”的意思。

使⽤案例:

@Configuration
@EnableScheduling
@Async
public class TimeConfig {

    @Scheduled(cron = "15/5 * * * * ?")//写入执行时间
    public void test1(){
        System.out.println("test1----");
    }
}

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点

0 0/30 9-17 * * ? 朝九晚五⼯作时间内每半⼩时

0 0 12 ? * WED 表⽰每个星期三中午12点

"0 0 12 * * ?" 每天中午12点触发

"0 15 10 ? * *" 每天上午10:15触发

"0 15 10 * * ?" 每天上午10:15触发

"0 15 10 * * ? *" 每天上午10:15触发

"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发

"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发

"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发

"0 10,44 14 ? 3 WED" 每年三⽉的星期三的下午2:10和2:44触发

"0 15 10 ? * MON-FRI" 周⼀⾄周五的上午10:15触发

"0 15 10 15 * ?" 每⽉15⽇上午10:15触发

"0 15 10 L * ?" 每⽉最后⼀⽇的上午10:15触发

"0 15 10 ? * 6L" 每⽉的最后⼀个星期五上午10:15触发

"30 * * * * ?" 程序启动以后的每分钟的第三十秒执行一次

"30 10 * * * ?" 程序启动以后每小时的第10分钟30秒执行一次

"30 10 1 * * ?" 程序启动以后每天的1:10:30一次

"30 10 1 20 * ?" 程序启动以后每月20日 1:10:30 执行一次

"30 10 1 20 10 ? " 每年10月20日 1:10:30 秒执行

"30 10 1 ? 10 * " 10月每日 1:10:30 执行一次

"30 10 1 ? 10 SUN" 10月每周日 1:10:30

"15,30,45 * * * * * " 第15,30,45秒执行

"15-45 * * * * ?" 程序启动后每分钟15到45秒 执行一次

"15/5 * * * * ?" 程序启动5秒后 每到15秒执行一次

"15-30/5 * * * * ?"

"0 0/3 * * * ?"

"0 15 10 ? * MON-FRI"

"0 15 10 L * ?" 每月最后一天的10:15:0 秒执行一次

"0 15 10 LW * ?" 每月的最后一个工作日 0:15:0 秒执行一次

"0 15 10 ? * 5L" 每月最后一个周4 10:15:00

"0 15 10 ? * 5#3" 每月的第三个星期4 10:15:0 执行一次

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白鱼塘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值