SpringBoot中@Scheduled實(shí)現(xiàn)服務(wù)啟動(dòng)時(shí)執(zhí)行一次
說到定時(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)之后多長時(shí)間再執(zhí)行。如@Scheduled(fixedDelay = 5000)
- fixedDelayString:與 fixedDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符,如@Scheduled(fixedDelayString = “5000”)
- fixedRate:上一次開始執(zhí)行時(shí)間點(diǎn)之后多長時(shí)間再執(zhí)行,如@Scheduled(fixedRate = 5000)
- fixedRateString:與 fixedRate 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
- initialDelay:第一次延遲多長時(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í)行類
該類主要在啟動(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();
}
}
}
注:啟動(dòng)類記得自己加上@EnableScheduling,定時(shí)任務(wù) 才會(huì)執(zhí)行,當(dāng)然這個(gè)不影響本文的邏輯測試
三、測試結(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)容請搜索腳本之家以前的文章或繼續(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)文章
詳解IDEA中MAVEN項(xiàng)目打JAR包的簡單方法
本篇文章主要介紹了詳解IDEA中MAVEN項(xiàng)目打JAR包的簡單方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
springboot整合ehcache 實(shí)現(xiàn)支付超時(shí)限制的方法
在線支付系統(tǒng)需要極高的穩(wěn)定性,在有限的系統(tǒng)資源下,穩(wěn)定性優(yōu)先級(jí)要高于系統(tǒng)并發(fā)以及用戶體驗(yàn),因此需要合理的控制用戶的支付請求。下面通過本文給大家介紹springboot整合ehcache 實(shí)現(xiàn)支付超時(shí)限制的方法,一起看看吧2018-01-01
Mybatis實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例(CRUD)
本篇文章主要介紹了Mybatis實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例(CRUD),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
關(guān)于@Component注解下的類無法@Autowired問題
這篇文章主要介紹了關(guān)于@Component注解下的類無法@Autowired問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
劍指Offer之Java算法習(xí)題精講N叉樹的遍歷及數(shù)組與字符串
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03
Java利用redis zset實(shí)現(xiàn)延時(shí)任務(wù)詳解
zset作為redis的有序集合數(shù)據(jù)結(jié)構(gòu)存在,排序的依據(jù)就是score。本文就將利用zset score這個(gè)排序的這個(gè)特性,來實(shí)現(xiàn)延時(shí)任務(wù),感興趣的可以了解一下2022-08-08
SpringBoot自動(dòng)配置的實(shí)現(xiàn)原理
這篇文章主要介紹了詳解SpringBoot自動(dòng)配置原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01

