Springboot的默認定時任務——Scheduled注解


本博客參考博文地址

1.pom依賴:

引入springboot starter包即可

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

2.啟動類啟用定時任務:

在啟動類上加注解:@EnableScheduling即可實現。

@SpringBootApplication @EnableScheduling public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

3.創建定時任務實現類:

定時任務1:

@Component public class SchedulerTask { private int count=0; @Scheduled(cron="*/6 * * * * ?") private void process(){ System.out.println("this is scheduler task runing  "+(count++)); } }

定時任務2:

@Component public class Scheduler2Task { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); @Scheduled(fixedRate = 6000) public void reportCurrentTime() { System.out.println("現在時間:" + dateFormat.format(new Date())); } }

結果如下:

this is scheduler task runing  0 現在時間:09:44:17
this is scheduler task runing  1 現在時間:09:44:23
this is scheduler task runing  2 現在時間:09:44:29
this is scheduler task runing  3 現在時間:09:44:35

參數說明:

  @Scheduled接受兩種定時的設置:

    一種是cornexpression。

    一種是Rate/Delay表達式(毫秒值):

      @Scheduled(fixedRate = 6000):上一次開始執行時間點后每隔6秒執行一次。

      @Scheduled(fixedDelay = 6000):上一次執行完畢時間點之后6秒再執行。

      @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         , - * /

 

注:

  *表示所有值,在分鍾里表示每一分鍾觸發。在小時,日期,月份等里面表示每一小時,每一日,每一月。

  ?表示不指定值。表示不關心當前位置設置的值。 比如不關心是周幾,則周的位置填寫?。  主要是由於日期跟周是有重復的所以兩者必須有一者設置為?

  - 表示區間。小時設置為10-12表示10,11,12點均會觸發。

  ,表示多個值。 小時設置成10,12表示10點和12點會觸發。

  / 表示遞增觸發。 5/15表示從第5秒開始,每隔15秒觸發。

  L 表示最后的意思。 日上表示最后一天。星期上表示星期六或7。 L前加數據,表示該數據的最后一個。

     星期上設置6L表示最后一個星期五。  6表示星期五

  W表示離指定日期最近的工作日觸發。15W離該月15號最近的工作日觸發。

  #表示每月的第幾個周幾。 6#3表示該月的第三個周五。

 

  示例:

    "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觸發 
    每天早上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 *


免責聲明!

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



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