Spring自带的定时任务系统,使用注解时必须指定任意一个参数(属性):cron、fixedDelay或fixedRate;
1. 启动类添加开启注解
@EnableScheduling
2. cron参数
/**
* cron 一共可以有7个参数 以空格分开 其中年不是必须参数
* [秒] [分] [小时] [日] [月] [周] [年]
*/
@Scheduled(cron ="0 0 0 * * * ?")
public void testScheduledCron(){
}
序号 | 参数 | 取值范围 | 特殊字符 |
---|---|---|---|
1 | 秒 | [0, 59] | * , - / |
2 | 分钟 | [0, 59] | * , - / |
3 | 小时 | [0, 23] | * , - / |
4 | 日期 | [1, 31] | * , - / ? L W |
5 | 月 | [1, 12]或[JAN, DEC] | * , - / |
6 | 星期 | [1,7]或[MON, SUN] | * , - / ? L # |
常用通配符:
序号 | 特殊字符 | 描述 | 样例 |
---|---|---|---|
1 | * | 所有可能的值 | 如在分钟的位置配置*,表示每一分钟都生效 |
2 | , | 枚举值 | 表示对应的数据,如分钟位置配置10,20,30 ,表示在某点的10分、20分和30分执行 |
3 | - | 范围 | 间隔值1,左右的数据表示上界和下界,如分钟位置配置:10-20,表示某点10分和20分之间,每1分钟执行 |
4 | / | 增量 | 左侧数据表示起始值,右侧数据表示增量,分钟位置配置:3/10,表示从第一个间隔3分钟后,每10分钟执行,秒位置:2/10,表示从第一个2秒后开始,每10秒执行 |
5 | ? | 不指定 | 在日期或星期中使用,为避免冲突,将另一个位置配置? |
6 | L | Last,最后一个 | 日期位置使用L表示最后一天,星期位置使用L表示最后一个星期的最后一天 |
7 | W | 除周末以外的有效工作日 | 日期位置就近原则,如果5W,5日在为星期六,则在4日执行,如果5日是星期日,则在星期一执行,如果5日在周一~周五,则在5日当天执行 |
8 | # | 确定每个月第几个星期几,仅支持星期 | 星期位置,4#2表示某月的第二个星期四 |
示例:
每天凌晨零点执行
@Scheduled(cron ="0 0 0 * * * ?")
每隔五分钟执行
@Scheduled(cron ="0 */5 0 * * * ?")
cron | 描述 |
---|---|
0/5 * * * * ? | 每5秒执行一次 |
0 0/2 * * * ? | 每两分钟执行一次 |
0 2 3 1 * ? | 每月1日3点2分执行一次 |
0 2 3 1 1-3 ? | 1月到3月的:1日3点2分执行一次 |
0 0 2,3,4,5 * * ? | 每天2点、3点、4点和5点执行一次 |
0 10 2 * * ? | 每天2:10分执行一次 |
0 0-5 14,16 * * ? | 每天14:00到14:55和16:00到16:55每5分钟执行一次 |
0 10 10 L * ? | 每月最后一天的10:10执行一次 |
0 10 10 5W * ? | 每月的工作日5日10:10分执行,如果5日为周六,则往前退一天(星期五),4日10:10执行,如果5日为星期日,则往后推一天(星期一),6日10:10日执行 |
0 10 10 ?* 4#2 | 每月的第二个星期四10:10执行一次 |
0/2 * * * * ? 表示每2秒 执行任务
0 0/2 * * * ? 表示每2分钟 执行任务
0 0 2 1 * ? 表示在每月的1日的凌晨2点调整任务
0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午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 15 10 * * ? 每天上午10:15触发
0 15 10 * * ? 2005 2005年的每天上午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触发
0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
在线生成cron:在线Cron表达式生成器 (qqe2.com)
3. zone参数
zone能够指定获取的时区,默认是空,表示使用服务器所在时区,比如Asia/BeiJingi或者Asia/Shanghai。
4. fixedDelay参数
fixedDelay表示上次调用结束后与下次调用之间的固定时间,单位是毫秒。
@Scheduled(fixedDelay= 3000) //表示距离上次调用结束后三秒再执行
5. fixedDelayString参数
与fixedDelay是几乎一样的,唯一的差异是fixedDelayString
是支持占位符的。
6. fixedRate
fixedRate表示多久执行一次,单位是毫秒。与cron的/通配符用法相似;
@Scheduled(fixedRate= 3000) // 表示每三秒执行一次
7. fixedRateString
相比fixedRate支持占位符
8. initialDelay
表示第一次延迟多少毫秒执行,单位是毫秒
@Scheduled(initialDelay= 3000)
表示第一次执行时,延迟3秒执行
9. initialDelayString
initialDelay的升级,支持占位符。