spring boot 學習(八)定時任務 @Scheduled


SpringBoot 定時任務 @Scheduled

前言

有時候,我們有這樣的需求,需要在每天的某個固定時間或者每隔一段時間讓應用去執行某一個任務。一般情況下,可以使用多線程來實現這個功能;在 Spring 框架下可以搭配 Quartz 來實現,附上筆記 Spring Quartz 實現多任務定時調用。在 SpringBoot 框架下,我們可以用 Spring scheduling 來實現定時任務功能。
首先,我們先創建一個 Spring Boot 項目。創建方法:
* (自動完成初始化)http://blog.csdn.net/u011244202/article/details/54767036
* (手動完成初始化)http://blog.csdn.net/u011244202/article/details/54604421

同時要注意,SpringBoot 項目需要 JDK8 的編譯環境!

然后,在項目主類中加入@EnableScheduling注解,啟用定時任務的配置

@SpringBootApplication
@EnableScheduling
public class Application extends SpringBootServletInitializer{

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

}

 

最后,創建定時任務實現類,注意加上注解@Scheduled

@Scheduled 的介紹

1. cron 表達式與 zone

zone:表示將解析cron表達式的時區。
關於 cron 表達式,可以參考一下 http://blog.csdn.net/u011244202/article/details/54382466 里面的附錄。

2. fixedRate 的解釋

調用固定周期(以毫秒為單位)執行方法。就是上一次開始執行時間點之后延遲執行。

3. fixedDelay 的解釋

上次調用結束和下一次調用結束之間的固定周期(以毫秒為單位)執行方法。就是上一次執行完畢時間點之后延遲執行。

4. initialDelay 的解釋

在第一次執行fixedRate()或fixedDelay()任務之前延遲(以毫秒為單位)。

實例

在項目啟動 8s 后,每隔 5s 調用定時任務。

@Component
public class ScheduledTasks {

    //輸出時間格式
    private static final SimpleDateFormat format = new SimpleDateFormat("HH(hh):mm:ss S");

    @Scheduled(initialDelay = 5000, fixedRate = 5000)
    public void firstScheduledTasks(){
        System.out.println("定時任務執行,現在時間是 : "+format.format(new Date()));
    }
}

 結果圖:

這里寫圖片描述

項目參考地址

項目參考地址 : https://github.com/FunriLy/springboot-study/tree/master/%E6%A1%88%E4%BE%8B4

注意:

cron、fixedDelay、fixedRate 三者之間不能共存!!!
會拋出一個錯誤:

//Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method 'firstScheduledTasks': Exactly one of the 'cron', 'fixedDelay(String)', or 'fixedRate(String)' attributes is required.

官方文檔

實例文檔 : http://spring.io/guides/gs/scheduling-tasks/
注解文檔 : http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Scheduled.html

 


免責聲明!

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



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