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的升級,支持占位符。