SpringBoot注解@EnableScheduling定時任務(wù)詳細解析
一、定時任務(wù)作用?
定時任務(wù)相當(dāng)于鬧鐘 在什么時間做什么事情(執(zhí)行什么命令/腳本)
參數(shù):
@EnableScheduling 開啟對定時任務(wù)的支持
其中Scheduled注解中有以下幾個參數(shù):
1.cron是設(shè)置定時執(zhí)行的表達式,如 0 0/5 ?每隔五分鐘執(zhí)行一次 秒 分 時 天 月
2.zone表示執(zhí)行時間的時區(qū)
3.fixedDelay 和fixedDelayString 表示一個固定延遲時間執(zhí)行,上個任務(wù)完成后,延遲多長時間執(zhí)行
4.fixedRate 和fixedRateString表示一個固定頻率執(zhí)行,上個任務(wù)開始后,多長時間后開始執(zhí)行
5.initialDelay 和initialDelayString表示一個初始延遲時間,第一次被調(diào)用前延遲的時間
二、舉例說明
1、pom.xml中導(dǎo)入必要的依賴:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent> <dependencies> <!-- SpringBoot 核心組件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
2、寫一個springboot的啟動類:
啟動類里面使用@EnableScheduling 注解開啟功能,自動掃描
@SpringBootApplication @EnableScheduling //開啟定時任務(wù) public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } }
3、新建一個Job類:
- 要在任務(wù)的類上寫@Component
- 要在任務(wù)方法上寫@Scheduled
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; /** * @ClassName Jobs * @Author jeffrey * @Description Jobs **/ @Component public class Jobs { //表示方法執(zhí)行完成后5秒 @Scheduled(fixedDelay = 5000) public void fixedDelayJob() throws InterruptedException { System.out.println("fixedDelay 每隔5秒" + new Date()); } //表示每隔3秒 @Scheduled(fixedRate = 3000) public void fixedRateJob() { System.out.println("fixedRate 每隔3秒" + new Date()); } //表示每天8時30分0秒執(zhí)行 @Scheduled(cron = "0 0,30 0,8 ? * ? ") public void cronJob() { System.out.println(new Date() + " ...>>cron...."); } }
執(zhí)行結(jié)果如下:
fixedRate 每隔3秒Thu Jun 20 20:26:41 CST 2019
fixedDelay 每隔5秒Thu Jun 20 20:26:43 CST 2019
fixedRate 每隔3秒Thu Jun 20 20:26:44 CST 2019
fixedDelay 每隔5秒Thu Jun 20 20:26:48 CST 2019
三、總結(jié)
- fixedDelay和fixedRate,單位是毫秒,這里這里就是5秒和3秒,它們的區(qū)別就是:fixedRate就是每多次分鐘一次,不論你業(yè)務(wù)執(zhí)行花費了多少時間。我都是1分鐘執(zhí)行1次,而fixedDelay是當(dāng)任務(wù)執(zhí)行完畢后1分鐘在執(zhí)行。所以根據(jù)實際業(yè)務(wù)不同,我們會選擇不同的方式。
- cron表達式:比如你要設(shè)置每天什么時候執(zhí)行,就可以用它
- cron表達式,有專門的語法,而且感覺有點繞人,不過簡單來說,大家記住一些常用的用法即可,特殊的語法可以單獨去查。
- cron一共有7位,但是最后一位是年,可以留空,所以我們可以寫6位:
- 第一位,表示秒,取值0-59
- 第二位,表示分,取值0-59
- 第三位,表示小時,取值0-23
- 第四位,日期天/日,取值1-31
- 第五位,日期月份,取值1-12
- 第六位,星期,取值1-7,星期一,星期二...,注:不是第1周,第二周的意思
- 另外:1表示星期天,2表示星期一。
- 第7為,年份,可以留空,取值1970-2099
cron中,還有一些特殊的符號,含義如下:
- (*)星號:可以理解為每的意思,每秒,每分,每天,每月,每年...
- (?)問號:問號只能出現(xiàn)在日期和星期這兩個位置。
- (-)減號:表達一個范圍,如在小時字段中使用“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 3 * * ? 每天3點執(zhí)行
- 0 5 3 * * ? 每天3點5分執(zhí)行
- 0 5 3 ? * * 每天3點5分執(zhí)行,與上面作用相同
- 0 5/10 3 * * ? 每天3點的 5分,15分,25分,35分,45分,55分這幾個時間點執(zhí)行
- 0 10 3 ? * 1 每周星期天,3點10分 執(zhí)行,注:1表示星期天
- 0 10 3 ? * 1#3 每個月的第三個星期,星期天 執(zhí)行,#號只能出現(xiàn)在星期的位置
到此這篇關(guān)于SpringBoot注解@EnableScheduling定時任務(wù)詳細解析的文章就介紹到這了,更多相關(guān)SpringBoot注解@EnableScheduling內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring中@EnableScheduling實現(xiàn)定時任務(wù)代碼實例
- Spring中的@EnableScheduling定時任務(wù)注解
- SpringBoot使用Scheduling實現(xiàn)定時任務(wù)的示例代碼
- springboot通過SchedulingConfigurer實現(xiàn)多定時任務(wù)注冊及動態(tài)修改執(zhí)行周期(示例詳解)
- Spring定時任務(wù)關(guān)于@EnableScheduling的用法解析
- springboot項目使用SchedulingConfigurer實現(xiàn)多個定時任務(wù)的案例代碼
- SpringBoot使用SchedulingConfigurer實現(xiàn)多個定時任務(wù)多機器部署問題(推薦)
- Spring Scheduling本地任務(wù)調(diào)度設(shè)計與實現(xiàn)方式
相關(guān)文章
idea使用帶provide修飾依賴導(dǎo)致ClassNotFound
程序打包到Linux上運行時,若Linux上也有這些依賴,為了在Linux上運行時避免依賴沖突,可以使用provide修飾,本文主要介紹了idea使用帶provide修飾依賴導(dǎo)致ClassNotFound,下面就來介紹一下解決方法,感興趣的可以了解一下2024-01-01Springboot中的Validation參數(shù)校驗詳解
這篇文章主要介紹了Springboot中的Validation參數(shù)校驗詳解,Springboot參數(shù)校驗是一種常用的驗證機制,在傳遞參數(shù)時進行校驗,以確保參數(shù)的有效性和正確性,該機制可以幫助開發(fā)者在代碼實現(xiàn)前就避免一些常見的錯誤,需要的朋友可以參考下2023-10-10SpringBoot中讀取jar包中的resources目錄下的文件的三種方式
這篇文章給大家總結(jié)了SpringBoot讀取 jar 包中的 resources 目錄下的文件的三種方式,文中有詳細的代碼示例供大家參考,,需要的朋友可以參考下2023-06-06IntelliJ IDEA語法報錯"Usage of API documented as @since 1.6+"的解決
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA語法報錯"Usage of API documented as @since 1.6+"的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10java+selenium 網(wǎng)易云音樂刷累計聽歌數(shù)的方法
這篇文章主要介紹了java+selenium 網(wǎng)易云音樂刷累計聽歌數(shù)的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Java索引越界異常Exception java.lang.IndexOutOfBoundsException
本文主要介紹了Java索引越界異常Exception java.lang.IndexOutOfBoundsException的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06