說起 cron 表達式大家一定不陌生,我們常用來作為定時任務執行策略規則。在 Spring Boot 框架中 cron 表達式主要配合 @Scheduled 注解在應用程序中使用。在 Spring Boot 2.4 (既 Spring 5.3)以后,引入了 CronExpression 表達式處理器來替代原有的 CronSequenceGenerator。
為什么要替代原有的 CronSequenceGenerator ? 此處理器是基于 java.util.Calendar局限性比較大,無法完成last day of month
例如利用CronExpression 計算表達式下次執行時間語義。
執行結果
新增常用表達式通用宏
對于非開發人員來說 cron 表達式并不容易理解,所以很難在出現錯誤的時候進行修復。比如筆者會把 cron 表達式 在在線網站[1] 模擬運行一下,確認執行過程方便排查問題。
為了提高可讀性,Spring Boot 現在支持以下代表常用表達式的宏??梢允褂眠@些宏而不是六位的表達式,因此:
@Scheduled(cron = "@hourly")。
相當于
@Scheduled(cron = "0 0 * * * *")
其他常用宏命令
增強原有表達式 最后幾天
如上其中的 每月的第幾天、每周的第幾天 支持 最后幾天 (L) 的語義 例如:
增強原有表達式 工作日
如上其中的 每月的第幾天 支持 工作日 (W)的語義 例如:
0 0 0 1W * * 每月的第一個工作日零時
0 0 0 LW * * 每月的最后一個工作日零時
增強原有表達式 幾周的星期幾
如上其中的 每周的第幾天 支持 每月第幾周的第幾天語義 例如
0 0 0 ? * 5#2 每月第二周的星期五零時
0 0 0 ? * MON#1 每月周一的星期一零時
參考資料
[1]
在線網站: https://cron.qqe2.com/
喜歡記得點贊加關注不迷路哦?。。?!