項目開發中常常須要執行一些定時任務,好比在天天凌晨,須要從 implala 數據庫拉取產品功能活躍數據,分析處理後存入到 MySQL 數據庫中。相似這樣的需求還有許多,那麼怎麼去實現定時任務呢,有如下幾種實現方式。html
Spring 自身提供了對定時任務的支持,本文將介紹 Spring Boot 中 @Scheduled 定時器的使用。java
首先,在項目啓動類上添加 @EnableScheduling 註解,開啓對定時任務的支持spring
@SpringBootApplication
@EnableScheduling
public class ScheduledApplication {
public static void main(String[] args) {
SpringApplication.run(ScheduledApplication.class, args);
}
}
複製代碼
其中 @EnableScheduling註解的做用是發現註解@Scheduled的任務並後臺執行。數據庫
其次,編寫定時任務類和方法,定時任務類經過 Spring IOC 加載,使用 @Component 註解,定時方法使用 @Scheduled 註解。bash
@Component
public class ScheduledTask {
@Scheduled(fixedRate = 3000)
public void scheduledTask() {
System.out.println("任務執行時間:" + LocalDateTime.now());
}
}
複製代碼
fixedRate 是 long 類型,表示任務執行的間隔毫秒數,以上代碼中的定時任務每 3 秒執行一次。框架
運行定時工程,項目啓動和運行日誌以下,可見每 3 秒打印一第二天志執行記錄。分佈式
2019-10-16 22:50:04.791 INFO 10610 --- [ main] com.wupx.ScheduledApplication : Started ScheduledApplication in 1.513 seconds (JVM running for 1.976)
任務執行時間:2019-10-16T22:50:04.791
任務執行時間:2019-10-16T22:50:07.782
任務執行時間:2019-10-16T22:50:10.779
複製代碼
在上面的入門例子中,使用了@Scheduled(fixedRate = 3000) 註解來定義每過 3 秒執行的任務,對於 @Scheduled 的使用能夠總結以下幾種方式:ide
其中,經常使用的cron表達式有:ui
本文主要介紹了基於 Spring Boot 內置的定時任務的配置使用,主要涉及兩個註解,四個屬性的配置:spa
參考