1.pom依賴:
引入springboot starter包即可
>
>
>
org.springframework.bootgroupid
>
>
spring-boot-starterartifactid
>
dependency
>
dependencies
>
2.啟動類啟用定時任務:
在啟動類上加註解:@enablescheduling即可實現。
@enablescheduling
public
class
}3.建立定時任務實現類(單執行緒和多執行緒版本):
3.1 單執行緒定時任務:
@component
public
class
scheduledtask
")@scheduled
(fixedrate =
6000
)public
void
gettask1()
@scheduled
(cron =
"$")
public
void
gettask2()
}
jobs.fixeddelay=6000
jobs.cron=0/5 * * * * ?
執行結果:
3.2 多執行緒定時任務:
加乙個多執行緒配置類,ok
@configuration
public class scheduleconfig implements schedulingconfigurer
}
結果如下:
可以看到開啟了多個執行緒
還可以基於註解**@enableasync和@async**非同步執行定時任務,也是多執行緒
@component
@enableasync
public
class
scheduledtask")
public
void
gettask1()
@async
@scheduled
(cron =
"$")
public
void
gettask2()
}
或者增加配置類定義執行緒池的一些資訊
@configuration
@enableasync
public
class
asyncconfig
}
4.引數說明:
@scheduled的**
public @inte***ce
scheduled
@scheduled接受多種定時引數的設定(主要分為兩類cornexpression和rate/delay表示式):
(1)cron:cron表示式,指定任務在特定時間執行;
(3)fixeddelaystring:與fixeddelay含義一樣,只是引數型別變為string;
(4)fixedrate:表示按一定的頻率執行任務,引數型別為long,單位ms;
(5)fixedratestring: 與fixedrate的含義一樣,只是將引數型別變為string;
(6)initialdelay:表示延遲多久再第一次執行任務,引數型別為long,單位ms;
(7)initialdelaystring:與initialdelay的含義一樣,只是將引數型別變為string;
(8)zone:時區,預設為當前時區,一般沒有用到。
☆☆☆☆☆fixedrate和fixeddelay 的區別
@scheduled(initialdelay=1000, fixedrate=6000):第一次延遲1秒後執行,之後按fixedrate的規則每6秒執行一次。
cornexpression表示式詳解:
字段允許值
允許特殊字元
秒0-59
, - * /
分0-59
, - * /
小時0-23
, - * /
日1-31
, - * ? / l w c
月1-12或jan-dec
, - * /
周1-7或sun-sat
, - * ? / l c #
年留空或1970-2099
, - * /
cron一共有7位,但是最後一位是年,可以留空,所以我們可以寫6位:
☆☆☆☆☆
* 表示所有值,在分鐘裡表示每一分鐘觸發。在小時,日期,月份等裡面表示每一小時,每一日,每一月。
? 表示不指定值。表示不關心當前位置設定的值。 比如不關心是週幾,則周的位置填寫?。 主要是由於日期跟週是有重複的所以兩者必須有一者設定為?
- 表示區間。小時設定為10-12表示10,11,12點均會觸發。
, 表示多個值。 小時設定成10,12表示10點和12點會觸發。
/ 表示遞增觸發。 5/15表示從第5秒開始,每隔15秒觸發。
l 表示最後的意思。 日上表示最後一天。星期上表示星期六或7。 l前加資料,表示該資料的最後乙個。
星期上設定6l表示最後乙個星期五。 6表示星期五
w 表示離指定日期最近的工作日觸發。15w離該月15號最近的工作日觸發。
#表示每月的第幾個週幾。 6#3表示該月的第三個周五。
示例: 「0 30 8,13 * * ?」 每天8點30 13點30
"0 0 9,14 * * ? #每天9點 14點
"0 50 7,15 * * ? 周一到周五是上午7:20執行,週六是15:20執行
"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觸發
每天早上6點 0 6 * * * 每兩個小時 0 */2 * * *
晚上11點到早上8點之間每兩個小時,早上八點 0 23-7/2,8 * * *
每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點 0 11 4 * 1-3
1月1日早上4點 0 4 1 1 *
reference :
linux定時任務 at定時任務
at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...
at定時任務
at的守護程序每60秒檢查一次作業佇列,有作業時檢查作業,時間恰好達到,則執行作業。前提 保證atd程序已經啟動,檢查atd程序是否啟動 ps ef grep atd。atd的命令格式 at 選項 時間 ctrl d 結束at命令的輸入。選項 m 任務完成後給使用者傳送郵件,沒有標準輸出。i atg...
at定時任務
1 at是只執行一次,執行完後任務刪除。at的守護程序atd會以後臺模式執行,檢查作業佇列來執行。2 預設 atd每60秒巡邏一次,有作業時候,檢查作業時間,如果和當前時間一樣,就執行任務 3 在使用at命令的時候,一定要保證他的守護者atd程序的啟動。用ps ef grep atd來檢視atd是否...