項目開發中常常須要執行一些定時任務,好比在天天凌晨,須要從 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 註解。框架
@Component public class ScheduledTask { @Scheduled(fixedRate = 3000) public void scheduledTask() { System.out.println("任務執行時間:" + LocalDateTime.now()); } }
fixedRate 是 long 類型,表示任務執行的間隔毫秒數,以上代碼中的定時任務每 3 秒執行一次。分佈式
運行定時工程,項目啓動和運行日誌以下,可見每 3 秒打印一第二天志執行記錄。ide
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 的使用能夠總結以下幾種方式:ui
其中,經常使用的cron表達式有:.net
本文主要介紹了基於 Spring Boot 內置的定時任務的配置使用,主要涉及兩個註解,四個屬性的配置:日誌
<center><img src="https://img2018.cnblogs.com/blog/1356806/201910/1356806-20191009000648748-355850292.png" /></center>
參考
https://spring.io/guides/gs/scheduling-tasks/
https://www.tutorialspoint.com/spring_boot/spring_boot_scheduling.htm
https://docs.spring.io/spring/docs/2.5.x/reference/scheduling.html