SpringTask
Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑
应用场景:信用卡每月还款提醒、火车票售票系统处理未支付订单
fixedDelay:上一次任务执行完成后多长时间(ms)执行下一次任务
fixedRate:上一次任务执行开始后多长时间(ms)执行下一次任务,如果任务未完成,需要等到任务完成
initialDelay:第一次任务将会在延迟多长时间(ms)后开始执行
cron:指定一个时间表达式,可以通过配置确定执行任务的时间点
cron表达式: 在线Cron表达式生成器
cron表达式其实就是一个字符串,通过cron表达式可以定义任务的
触发时间
字符串分为6个域,由空格分隔开,每个域代表一个含义:
秒 分 时 日 月 周
常用的符号
*:表示任意,例如在
分
域使用,即表示每
分钟都会触发?:表示忽略,只能用在
日
和周
两个域-:表示区间,例如在
分
域使用5-20,表示从5分到20分钟每分钟触发一次/:表示起始时间开始触发,然后每隔固定时间触发一次,例如在
分
域使用5/20,则意味着第5、25、45分别触发一次,:表示列出枚举值。例如在
分
域使用5,20则意味着在5和20分触发一次。L:表示最后,如果在
周
域使用5L,意味着在最后的一个星期四触发W: 表示用来描叙最接近指定天的工作日,只能出现在
日
域,系统将在离指定日期的最近的有效工作日触发事件#: 用于确定每个月第几个星期几,只能出现在
周
域,例如在4#2,表示某月的第二个星期三一般日和周的值不能同时设置(互斥),其中一个设置,另一个用?表示。
常用表达式例子
0 0 2 1 * ? 表示在每月1日的凌晨2点
0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15
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 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟
0 15 10 15 * ? 每月15日上午10:15
0 15 10 L * ? 每月最后一日的上午10:15
0 15 10 ? * 6L 每月的最后一个星期五上午10:15
0 15 10 ? * 6#3 每月的第三个星期五上午10:15