Spring Boot 配置定時任務

程序員社區 2022-01-07 13:04:15 阅读数:75

spring boot 配置

引言

       項目開發中經常需要執行一些定時任務,比如:需要在每天淩晨時候,分析一次前一天的日志信息。Spring為我們提供了异步執行任務調度的方式,提供 TaskExecutor 、TaskScheduler 接口。Spring Boot 項目,我們要開啟一個定時任務,需要如下兩步走:

  1. 項目中會用到 @EnableScheduling@Scheduled 兩個注解。
  2. 需要我們來編寫一個 cron 錶達式來指定任務執行規則。

1.注解的使用

  ①需要在項目啟動類上標注 @EnableScheduling 注解

@EnableScheduling //開啟基於注解的定時任務@SpringBootApplicationpublic class Springboot04TaskApplication {
 public static void main(String[] args) {
 SpringApplication.run(Springboot04TaskApplication.class, args); }}

  ②在具體的業務執行方法上標注 @Scheduled注解

@Servicepublic class xxxService{
 @Scheduled(cron = "0/4 * * * * MON-SAT") public void xxxMethod(){
 //此處為具體業務邏輯方法 System.out.println("業務邏輯方法"); }}

2.cron 錶達式介紹

       我們可以通過編寫 cron 錶達式來指定定時任務執行的規則。cron 錶達式由 7 個部分組成,各部分之間用空格隔開,Cron錶達式的7個部分從左到右代錶的含義如下:

秒(second) 分(minute) 時(hour) 日(day of month) 月(month) 星期(day of week) 年(year)

Ⅰ.各字段含義

字段 允許值 允許的特殊字符
秒(second) 0-59的整數 , - * /
分(minute) 0-59的整數 , - * /
時(hour) 0-23的整數 , - * /
日(day of month) 1 ~ 31的整數(但是你需要考慮你月的天數) , - * ? / L W C
月(month) 1-12的整數( 或者JAN-DEC) , - * /
星期(day of week) 1-7的整數( 或者MON-SUN)(1代錶星期日) , - * ? / L W C
年(year) 1970 ~ 2099(該字段為可選字段) , - * /

Ⅱ.特殊字符代錶含義

特殊字符 代錶含義
, 枚舉
- 區間
* 任意
/ 步長
? 日&星期沖突時匹配解决方案
L 最後
W 工作日
C 和calendar聯系後計算過的值
# 星期。eg:4#2,錶示第2個星期4

提示:星期和日不能同時為 * 。必須一個是*,另一個就是?。否則會報Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.錯誤。

Ⅲ.常用 cron 錶達式介紹

cron錶達式 錶達式代錶含義
0 0/5 14,18 * * ? 每天14點整,和18點整,每隔5分鐘執行一次
0 15 10 ? * 1-6 每個月的周一至周六10:15分執行一次
0 0 2 ? * 6L 每個月的最後一個周六淩晨2點執行一次
0 0 2 LW * ? 每個月的最後一個工作日淩晨2點執行一次
0 0 2-4 ? * 1#1 每個月的第一個周一淩晨2點到4點期間,每個整點都執行一次
0/4 * * * * MON-SAT 周一到周六,每4秒執行一次
0,1,2 * * * * MON-SAT 周一到周六,每分鐘的 0,1,2 秒執行一次
0 0 2 1 * ? * 錶示在每月的1日的淩晨2點執行一次
0 15 10 ? * MON-FRI 錶示周一到周五每天上午10:15執行一次
0 15 10 ? 6L 2002-2006 錶示2002-2006年的每個月的最後一個星期五上午10:15執行作
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 2005年的每天上午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 2002年至2005年的每月的最後一個星期五上午10:15觸發
0 15 10 ? * 6#3 每月的第三個星期五上午10:15觸發

你也可以搜索一下,網上有提供自定義 cron 錶達式的工具類。

  1. 在線 cron 錶達式生成器(1)
  2. 在線 cron 錶達式生成器(2)

以上兩步完成,Spring Boot 定時任務則配置OK

如果本文對你有所幫助,那就給我點個贊唄

End

版权声明:本文为[程序員社區]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071304152785.html