Spring Boot入門系列(八)整合定時任務Task,一秒搞定定時任務
前面介紹了Spring Boot 中的整合Redis快取已經如何實現資料快取功能。不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html。
今天主要講解Springboot整合定時任務。在SpringMvc中也會用到很多的定時任務,主要是通過Quartz實現。但是在Spring MVC中使用這些外掛相對還是比較麻煩的:要增加一些依賴包,然後加入各種配置等等。Spring Boot相對就簡單很多了,現在就來說說Spring Boot 是怎麼實現定時任務的。
一、使用註解@EnableScheduling
在application啟動類忠,加上@EnableScheduling 註解,Spring Boot 會會自動掃描任務類,開啟定時任務。
package com.weiz; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import tk.mybatis.spring.annotation.MapperScan; @SpringBootApplication //掃描 mybatis mapper 包路徑 @MapperScan(basePackages = "com.weiz.mapper") //掃描 所有需要的包, 包含一些自用的工具類包 所在的路徑 @ComponentScan(basePackages = {"com.weiz","org.n3r.idworker"}) //開啟定時任務 @EnableScheduling //開啟非同步呼叫方法 @EnableAsync public class SpringBootStarterApplication {
public static void main(String[] args) { SpringApplication.run(SpringBootStarterApplication.class, args); } }
說明:
1、@EnableScheduling 為開啟定時任務。
2、@ComponentScan 定義掃描包的路徑。
二、建立任務類,定義@Component 元件
建立com.weiz.tasks包,在tasks包裡增加TestTask任務類,加上@Component 註解,那麼TestTask就會作為元件被容器掃描到。掃描到之後,Spring Boot容器就會根據任務類裡面定義的時間,定時執行了。
package com.weiz.tasks; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class TestTask { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); // 定義每過3秒執行任務 @Scheduled(fixedRate = 3000) // @Scheduled(cron = "4-40 * * * * ?") public void reportCurrentTime() { System.out.println("現在時間:" + dateFormat.format(new Date())); } }
說明:@Scheduled 是定時任務執行的時間,可以每個一段時間執行,也可以使用cron 表示式定義執行時間。
三、Cron表示式
Spring Boot 定時任務支援每個一段時間執行或是使用cron 表示式定義執行時間。關於cron表示式,我之前的文章介紹過,大家可以看我以前的文章:《Quartz.NET總結(二)CronTrigger和Cron表示式》
四、測試
啟動程式之後,就可以看到系統每隔3s,會列印系統時間。
最後
以上,就把Spring Boot整合定時任務簡單介紹完了,是不是特別簡單,下一篇我會介紹Spring boot 的非同步任務。
這個系列課程的完整原始碼,也會提供給大家。大家關注我的微信公眾號(架構師精進),回覆:springboot原始碼。獲取這個系列課程的完整原始碼。