SpringBoot(十四)_springboot使用內建定時任務的使用
為什麼使用定時?
日常工作中,經常會用到定時任務,比如各種統計,並不要求實時性。此時可以通過提前設定定時任務先把資料跑出來,後續處理起來更方便. 本篇文章主要介紹 springboot內建定時任務。
實戰演示
1、pom檔案
pom 包裡面只需要引入 Spring Boot Starter 包即可,Spring Boot Starter 包中已經內建了定時的方法。我這裡方便演示,增加了lombok
<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.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> <scope>provided</scope> </dependency> </dependencies>
2、啟動類開啟定時
@SpringBootApplication @EnableScheduling public class ScheduledApplication { public static void main(String[] args) { SpringApplication.run(ScheduledApplication.class, args); } }
3、建立定時任務實現類
這裡並沒有直接在類中寫cron語句,而是寫到了配置檔案中。一般實際專案中這樣寫。
3.1、ScheduledTask 類
/** * @author: curry * @Date: 2018/10/10 */ @Component @Slf4j public class ScheduledTask { @Scheduled(cron = "${job.schedule}") private void process1() { log.info("start"); } }
3.2 application.properties
job.schedule = */5 * * * * ?
4、執行結果
2018-10-10 22:48:55.001[pool-1-thread-1] demo.ScheduledTask: start 2018-10-10 22:49:00.001[pool-1-thread-1] demo.ScheduledTask: start 2018-10-10 22:49:05.001[pool-1-thread-1] demo.ScheduledTask: start 2018-10-10 22:49:10.001[pool-1-thread-1] demo.ScheduledTask: start 2018-10-10 22:49:15.001[pool-1-thread-1] demo.ScheduledTask: start
corn 語法說明
cron 每位的含義
cron 一共有 7 位,最後一位是年,Spring Boot 定時方案中只需要設定 6 位即可:
- 第一位,表示秒,取值 0-59; - 第二位,表示分,取值 0-59; - 第三位,表示小時,取值 0-23; - 第四位,日期天/日,取值 1-31; - 第五位,日期月份,取值 1-12; - 第六位,星期,取值 1-7,星期一、星期二…; 注:不是第1周、第2周的意思,另外:1表示星期天,2表示星期一。 - 第七位,年份,可以留空,取值 1970-2099。
cron 符號含義
(*)星號:可以理解為每的意思,每秒、每分、每天、每月、每年……。 (?)問號:問號只能出現在日期和星期這兩個位置,表示這個位置的值不確定,每天 12 點執行,所以第六位星期的位置是不需要關注的,就是不確定的值。同時,日期和星期是兩個相互排斥的元素,通過問號來表明不指定值。 (-)減號:表達一個範圍,如在小時欄位中使用“10-12”,則表示從 10~12 點,即 10、11、12。 (,)逗號:表達一個列表值,如在星期欄位中使用“1、2、4”,則表示星期一、星期二、星期四。 (/)斜槓:如 x/y,x 是開始值,y 是步長,比如在第一位(秒) 0/15 就是,從 0 秒開始,每 15 秒,最後就是 0、15、30、45、60,另 */y,等同於 0/y。
舉個栗子
0 0 1 * * ?每天 1 點執行。 0 5 1 * * ?每天 1 點 5 分執行。 0-5 * * * * ?每分鐘的0/1/2/3/4/5 秒執行 0 5/10 1 * * ?每天 1 點的 5 分、15 分、25 分、35 分、45 分、55 分這幾個時間點執行。 0 5 1 ? * 1每週星期天,1點5分 執行,注:1 表示星期天。 0 10 3 ? * 1#3每個月的第 三 個星期,星期天執行,# 號只能出現在星期的位置。
fixedRate 說明
這個日常工作中很少用到,這裡不做詳細介紹
@Scheduled(fixedRate = 6000) :上一次開始執行時間點之後 6 秒再執行。 @Scheduled(fixedDelay = 6000) :上一次執行完畢時間點之後 6 秒再執行。 @Scheduled(initialDelay=1000, fixedRate=6000) :第一次延遲 1 秒後執行,之後按 fixedRate 的規則每 6 秒執行一次。
總結
其實,使用內建的定時任務還是很方便的,但是,如果複雜的情況一般使用Quartz 。大家工作中一般都會見過這個東西。下篇文章一塊學習一下這個東西。