## springboot的定時任務
### 兩步編碼實現定時任務。
- 開啟定時任務注解 :打開冰箱門 @enableScheduling
- 設置定時時間,corn表達式。 @scheduled
- corn表達式
-- http://cron.qqe2.com
corn表達式:空格區分組成部分
秒 分 時 日 月 星期
0-59 0-59 0-23 1-31 1-12 1-7
,-*/ ,-*/ ,-*/ ,-*/?LWC ,-*/ ,-*/?L C #
* corn通用表達式
通用符號: ,-*?
,標識枚舉值,例如在minutes域使用5,20.表示在時間的分鍾為5,20時觸發事件。
-表示范圍,例如在minutes域中使用5-20,表示在時間的分鍾為5-20時每分鍾都觸發事件。
\*表示匹配該區域的任意值,假如在minutes域使用*,表示時間分鍾數不做限制,每分鍾都觸發時間。
/表示,起始時間開始觸發,然后每間隔固定的時間觸發一次。
思考題:
秒 分 時 日 月 周 年
0 0 2 1 * ? * 表達什么意思:
每月的一號的凌晨兩點0分0秒。
秒 分 時 日 月 周
0 10,44 14 ? 3 WED:
0秒 14點10分,14點44分3月的星期三。
在每年的3月的星期三的14點10分0秒和14點44分0秒觸發事件。
專用符號:
? 只能用在dayofmonth和dayofweek兩個域中使用。
L 表示最后,
W 表示有效的工作日,只能出現dayofmonth域。系統將在離指定日期的最近的有效工作日觸發事件。
\# 用於確定每個月第幾個星期幾,只能出現在dayofweek域,例如在 4#2,表示某月的第二個星期三。
專有符號:
專有符號除?后,在spring定時任務中都不支持。
秒 分 時 日 月 周
0 0/30 9-22 * * ?
表示:每年每月每日的9點到22點每30分鍾觸發事件,對星期幾不設定。
0 0 9-22/4 * * ?
# 默認單線程的定時任務,如果事件持續事件較長,竟會將后續任務拖延,導致丟失任務。
# spring使用異步多線程實現,兩步
- 1.打開同步注解。@EnableAsync
- 2.設置異步執行。@Async
# 總結:
- 1.通過@enableScheduling注解開啟定時任務
- 2.通過@Scheduled設置定時任務
- corn表達式
# # 通用表達式:
- ,-*/
# # 專用表法式:
- ?
# 異步
- @enableAsync開啟異步執行。
- @Async設置異步執行的方法。