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