Scheduled定時計畫

2021-08-20 16:33:47 字數 2539 閱讀 2126

springboot整合了@scheduled的相關依賴(org.springframework.scheduling.annotation.scheduled);我們只需要直接使用即可。

注意:spring的定時任務預設是單執行緒的。如果有多個定時任務,那麼執行起來時間會有問題;這時就需要

開啟多執行緒了(先把基本知識介紹完,本文末尾再介紹執行緒問題)。

注:如果只有乙個定時任務,那麼我們可以將這個定時任務單獨拿出來作為乙個微服務;這樣一來就不需要開

啟多執行緒了。

cronexpression定義時間規則,cron表示式由6或7個空格分隔的時間字段組成: 秒分時

日月星期年(可選);

注:如果spring中使用的是q

uartz等的話,那麼cron表示式是支援七位的;如果spring中使用的是spring task等的話,

那麼cron表示式只支援六位。

字段允許值

允許的特殊字元

秒0-59

分0-59

時0-23

日1-31

, - * ? / l w c

月1-12   或  jan-dec

星期1-7   或   sun-sat

注:1是星期天,7是星期六

, - * ? / l c #

年1970-2099

特殊字元:

示例:

"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"

2023年的每天上午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"

2023年至2023年的每月的最後乙個星期五上午10:15觸發

"0 15 10 ? * 6#3"

每月的第三個星期五上午10:15觸發

在同乙個執行緒中,如果執行某乙個定時任務所需時間較長,那麼就可能影響其他所需時間較短的定時任務。即:當所需時間較長的方法搶占到了執行緒;在其還沒有執行完時,其他的定時任務錯過了「定時」。如:

控制台列印出的結果為:

配置執行緒池(springboot配置執行緒池無需引入其他依賴,直接使用註解即可):

在有@scheduled定時計畫的方法上,使用執行緒池:

此時,控制台列印出的資訊為:

如上圖所示:方法two每5秒執行一次;方法one每10秒執行一次(截圖我只截了一點,下面的也遵循這個規律)

由此可見:開啟多執行緒使用執行緒池後,解決了之前的問題。

spring 定時計畫

定時表示式 cronexpresession的設定格式,附下 字段 允許值 允許的特殊字元 秒 0 59 分 0 59 小時 0 23 日期 1 31 l w c 月份 1 12 或者 jan dec 星期 1 7 或者 sun sat l c 年 可選 留空,1970 2099 表示式 意義 0 ...

MySQL定時計畫任務

5.1版本以後,mysql支援定時執行 event 的功能,就跟linux的crontab差不多。一 先檢視一下你的msyql版本,查詢版本資訊的sql語句 sql select version 確定版本支援之後,再檢視一下event是否開啟 二 檢視是否開啟event 1 mysql event功...

ansible windows 定時計畫任務

ansible使用win shell模組執行windows命令。ansible all m win shell a schtasks create sc daily tn restart tr c windows system32 shutdown.exe r f t 1 st 02 00 建立定時...