SpringBoot中@Scheduled實(shí)現(xiàn)服務(wù)啟動(dòng)時(shí)執(zhí)行一次
說(shuō)到定時(shí)任務(wù),我們應(yīng)該會(huì)想起@Scheduled,Quartz以及XXL-JOB,但是有的單體服務(wù)或者小項(xiàng)目,為了方便快捷,可能會(huì)直接使用@Scheduled去實(shí)現(xiàn)異步任務(wù)。因此,從而延伸出本文的主題需求。
當(dāng)項(xiàng)目中使用@Scheduled,如何在項(xiàng)目啟動(dòng)的時(shí)候讓指定的異步任務(wù)提前執(zhí)行一次?
一、@Scheduled詳解
@Scheduled注解支持多個(gè)參數(shù),用于靈活控制任務(wù)執(zhí)行時(shí)間
cron:Cron表達(dá)式,可以精準(zhǔn)控制秒、分、小時(shí)、日、月、周等
- zone:接收一個(gè)時(shí)區(qū),比如我們一般使用的時(shí)區(qū)Asia/Shanghai,該字段我們一般留空。
- fixedDelay:上一次執(zhí)行完畢時(shí)間點(diǎn)之后多長(zhǎng)時(shí)間再執(zhí)行。如@Scheduled(fixedDelay = 5000)
- fixedDelayString:與 fixedDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符,如@Scheduled(fixedDelayString = “5000”)
- fixedRate:上一次開(kāi)始執(zhí)行時(shí)間點(diǎn)之后多長(zhǎng)時(shí)間再執(zhí)行,如@Scheduled(fixedRate = 5000)
- fixedRateString:與 fixedRate 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
- initialDelay:第一次延遲多長(zhǎng)時(shí)間后再執(zhí)行,如第一次延遲1秒后執(zhí)行,之后按fixedRate的規(guī)則每5秒執(zhí)行一次@Scheduled(initialDelay=1000, fixedRate=5000)
- initialDelayString:與 initialDelayString 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
二、邏輯實(shí)現(xiàn)
1、創(chuàng)建定時(shí)任務(wù)邏輯方法
/** * @Author 碼至終章 * @Version 1.0 */ @Component public class ScheduledTest { @Scheduled(cron = "* 1 * * * ?") public void task1() throws Exception{ System.out.println("task1 執(zhí)行: " + Thread.currentThread() + "-" + DateTime.now()); } }
2、新建一個(gè)啟動(dòng)執(zhí)行類(lèi)
該類(lèi)主要在啟動(dòng)時(shí)手動(dòng)調(diào)用指定的任務(wù)方法
/** * @Author 碼至終章 * @Version 1.0 */ @Component public class StartupTasks { private final ScheduledTest scheduledTasks; public StartupTasks(ScheduledTest scheduledTasks) { this.scheduledTasks = scheduledTasks; } @PostConstruct public void startUp() { try { System.out.println("服務(wù)啟動(dòng)執(zhí)行任務(wù)"); scheduledTasks.task1(); }catch (Exception e){ e.printStackTrace(); } } }
注:?jiǎn)?dòng)類(lèi)記得自己加上@EnableScheduling,定時(shí)任務(wù) 才會(huì)執(zhí)行,當(dāng)然這個(gè)不影響本文的邏輯測(cè)試
三、測(cè)試結(jié)果
服務(wù)啟動(dòng)后,查看打印信息
到此這篇關(guān)于SpringBoot中@Scheduled實(shí)現(xiàn)服務(wù)啟動(dòng)時(shí)執(zhí)行一次的文章就介紹到這了,更多相關(guān)SpringBoot 服務(wù)啟動(dòng)時(shí)執(zhí)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot項(xiàng)目使用@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù)的方法
- SpringBoot的@Scheduled和@Schedules區(qū)別小結(jié)
- @Scheduled在springboot中的使用方式
- springboot實(shí)現(xiàn)定時(shí)任務(wù)@Scheduled方式
- SpringBoot中@Scheduled()注解以及cron表達(dá)式詳解
- springboot Quartz動(dòng)態(tài)修改cron表達(dá)式的方法
- SpringBoot?@Scheduled?Cron表達(dá)式使用方式
相關(guān)文章
JavaWeb項(xiàng)目中classpath路徑詳解
今天小編就為大家分享一篇關(guān)于JavaWeb項(xiàng)目中classpath路徑詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12Spring依賴(lài)注入多種類(lèi)型數(shù)據(jù)的示例代碼
這篇文章主要介紹了Spring依賴(lài)注入多種類(lèi)型數(shù)據(jù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03Spring AOP如何自定義注解實(shí)現(xiàn)審計(jì)或日志記錄(完整代碼)
這篇文章主要介紹了Spring AOP如何自定義注解實(shí)現(xiàn)審計(jì)或日志記錄(完整代碼),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12關(guān)于Java創(chuàng)建線程的2種方式以及對(duì)比
這篇文章主要給大家介紹了關(guān)于Java創(chuàng)建線程的2種方式以及對(duì)比的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01用Java實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了用Java實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07