SpringBoot定時任務


一、Scheduled定時任務

  Scheduled定時任務器,是Spring3.0后自帶的一個定時任務器。

maven中添加相關庫

1 <dependency>
2     <groupId>org.springframework</groupId>
3     <artifactId>spring-context-support</artifactId>
4 </dependency>

編寫定時任務類

1 @Component 2 public class ScheduledConfig { 3     @Scheduled(cron="0/2 * * * * ?") 4     public void scheduledMethod() { 5         System.out.println("觸發了定時任務"); 6  } 7 }

在啟動類中開啟scheduled

1 @SpringBootApplication 2 @EnabledScheduling 3 public class App { 4     public static void main(String[] args) { 5         SpringApplication.run(App.class, args); 6  } 7 }

二、cron表達式

  Cron 表達式是一個字符串,分為6 或7 個域,每一個域代表一個含義

  Cron 有如下兩種語法格式:

  (1) Seconds Minutes Hours Day Month Week Year

  (2)Seconds Minutes Hours Day Month Week

1,結構

  corn 從左到右(用空格隔開):秒分小時月份中的日期月份星期中的日期年份

2,字段含義

Cron 表達式的時間字段除允許設置數值外,還可使用一些特殊的字符,提供列表、范圍、通配符等功能,細說如下:

●星號(*):可用在所有字段中,表示對應時間域的每一個時刻,例如,*在分鍾字段時,表示“每分鍾”;

●問號(?):該字符只在日期和星期字段中使用,它通常指定為“無意義的值”,相當於占位符;

●減號(-):表達一個范圍,如在小時字段中使用“10-12”,則表示從10 到12 點,即10,11,12;

●逗號(,):表達一個列表值,如在星期字段中使用“MON,WED,FRI”,則表示星期一,星期三和星期五

●斜杠(/):x/y 表達一個等步長序列,x 為起始值,y 為增量步長值。如在分鍾字段中使用0/15,則表示為0,15,30 和45 秒,而5/15 在分鍾字段中表示5,20,35,50,你也可以使用*/y,它等同於0/y;

●L:該字符只在日期和星期字段中使用,代表“Last”的意思,但它在兩個字段中意思不同。L 在日期字段中,表示這個月份的最后一天,如一月的31 號,非閏年二月的28 號;如果L 用在星期中,則表示星期六,等同於7。但是,如果L 出現在星期字段里,而且在前面有一個數值X,則表示“這個月的最后X 天”,例如,6L 表示該月的最后星期五;

●W:該字符只能出現在日期字段里,是對前導日期的修飾,表示離該日期最近的工作日。例如15W表示離該月15 號最近的工作日,如果該月15 號是星期六,則匹配14 號星期五;如果15 日是星期日,則匹配16 號星期一;如果15 號是星期二,那結果就是15 號星期二。但必須注意關聯的匹配日期不能夠跨月,如你指定1W,如果1 號是星期六,結果匹配的是3 號星期一,而非上個月最后的那天。W 字符串只能指定單一日期,而不能指定日期范圍;

●LW 組合:在日期字段可以組合使用LW,它的意思是當月的最后一個工作日;

●井號(#):該字符只能在星期字段中使用,表示當月某個工作日。如6#3 表示當月的第三個星期五(6表示星期五,#3 表示當前的第三個),而4#5 表示當月的第五個星期三,假設當月沒有第五個星期三,忽略不觸發;

● C:該字符只在日期和星期字段中使用,代表“Calendar”的意思。它的意思是計划所關聯的日期,如果日期沒有被關聯,則相當於日歷中所有日期。例如5C 在日期字段中就相當於日歷5 日以后的第一天。1C 在星期字段中相當於星期日后的第一天。Cron 表達式對特殊字符的大小寫不敏感,對代表星期的縮寫英文大小寫也不敏感。

例子:

@Scheduled(cron = "0 0 1 1 1 ?")//每年一月的一號的1:00:00 執行一次

@Scheduled(cron = "0 0 1 1 1,6 ?") //一月和六月的一號的1:00:00 執行一次

@Scheduled(cron = "0 0 1 1 1,4,7,10 ?") //每個季度的第一個月的一號的1:00:00 執行一次

@Scheduled(cron = "0 0 1 1 * ?")//每月一號1:00:00 執行一次

@Scheduled(cron="0 0 1 * * *") //每天凌晨1 點執行一次


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM