課題中需要實現定期操作的功能,基本步驟如下:
- 在有
@SpringBootApplication
(就是Application類)的地方添加@EnableScheduling
; - 在需要定期執行的方法上面添加
@Scheduled(...)
在註解中有很多種寫法來實現定期執行,但是固定時間(例如每一天的固定時間點)執行似乎(?)只能用cron表達式來實現。
cron表達式格式
java@Scheduled(cron = "* * * * * *")
public void method() {}
星號分別對應秒數、分鐘、小時、日、月、星期、年(可為空)。
佔位符
日和星期可以用?
來實現互斥,其他佔位符都要有具體意義,依賴關係從年遞減。
秒/分
值範圍:0-59,不允許為空,不合法的值將導致SchedulerException
異常。
*
代表每秒觸發,例如"* * * * * *"
表示每秒觸發;,
代表指定秒數觸發,例如"0,15,30,45 * * * * *"
表示每分鐘的第0/15/30/45秒觸發;-
代表指定期間內觸發,例如0-30 * * * * *
表示每分鐘的第0到第20秒每秒觸發一次;/
代表間隔,後面的值代表步長,例如0/30 * * * * *
表示每分鐘的第0秒觸發,30秒觸發一次,0-30/20 * * * * *
則表示第0秒到第30秒之間,每20秒觸發一次,也就是說第0秒和第20秒分別觸發。
小時
值範圍:0-23,不允許為空,不合法的值將導致SchedulerException
異常,且佔位符和秒/分相同。
日
值範圍:1-31,不允許為空,不合法的值將導致SchedulerException
異常。
月
值範圍:1-12,不允許為空,不合法的值將導致SchedulerException
異常。
星期
值範圍:1-7/MON-SUN,不允許為空,不合法的值將導致SchedulerException
異常。
年
值範圍:1970-2099,不合法的值將導致SchedulerException
異常。
例子
java“30 * * * * ?” //每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 20 10 ? 2011” //2011年10月20號1點10分30秒觸發任務
“30 10 1 ? 10 * 2011” //2011年10月每天1點10分30秒觸發任務
“30 10 1 ? 10 SUN 2011” //2011年10月每周日1點10分30秒觸發任務
“15,30,45 * * * * ?” //每15秒,30秒,45秒時觸發任務
“15-45 * * * * ?” //15到45秒內,每秒都觸發任務
“15/5 * * * * ?” //每分鐘的每15秒開始觸發,每隔5秒觸發一次
“15-30/5 * * * * ?” //每分鐘的15秒到30秒之間開始觸發,每隔5秒觸發一次
“0 0/3 * * * ?” //每小時的第0分0秒開始,每3分鐘觸發一次
“0 15 10 ? * MON-FRI” //星期一到星期五的10點15分0秒觸發任務
“0 15 10 L * ?” //每個月最後一天的10點15分0秒觸發任務
“0 15 10 LW * ?” //每個月最後一個工作日的10點15分0秒觸發任務
“0 15 10 ? * 5L” //每個月最後一個星期四的10點15分0秒觸發任務
“0 15 10 ? * 5#3” //每個月第三周的星期四的10點15分0秒觸發任務
參考: