SpringBoot中@Scheduled實現(xiàn)服務(wù)啟動時執(zhí)行一次
說到定時任務(wù),我們應(yīng)該會想起@Scheduled,Quartz以及XXL-JOB,但是有的單體服務(wù)或者小項目,為了方便快捷,可能會直接使用@Scheduled去實現(xiàn)異步任務(wù)。因此,從而延伸出本文的主題需求。
當(dāng)項目中使用@Scheduled,如何在項目啟動的時候讓指定的異步任務(wù)提前執(zhí)行一次?
一、@Scheduled詳解
@Scheduled注解支持多個參數(shù),用于靈活控制任務(wù)執(zhí)行時間
cron:Cron表達(dá)式,可以精準(zhǔn)控制秒、分、小時、日、月、周等

- zone:接收一個時區(qū),比如我們一般使用的時區(qū)Asia/Shanghai,該字段我們一般留空。
- fixedDelay:上一次執(zhí)行完畢時間點之后多長時間再執(zhí)行。如@Scheduled(fixedDelay = 5000)
- fixedDelayString:與 fixedDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符,如@Scheduled(fixedDelayString = “5000”)
- fixedRate:上一次開始執(zhí)行時間點之后多長時間再執(zhí)行,如@Scheduled(fixedRate = 5000)
- fixedRateString:與 fixedRate 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
- initialDelay:第一次延遲多長時間后再執(zhí)行,如第一次延遲1秒后執(zhí)行,之后按fixedRate的規(guī)則每5秒執(zhí)行一次@Scheduled(initialDelay=1000, fixedRate=5000)
- initialDelayString:與 initialDelayString 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
二、邏輯實現(xiàn)
1、創(chuàng)建定時任務(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、新建一個啟動執(zhí)行類
該類主要在啟動時手動調(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ù)啟動執(zhí)行任務(wù)");
scheduledTasks.task1();
}catch (Exception e){
e.printStackTrace();
}
}
}
注:啟動類記得自己加上@EnableScheduling,定時任務(wù) 才會執(zhí)行,當(dāng)然這個不影響本文的邏輯測試
三、測試結(jié)果
服務(wù)啟動后,查看打印信息

到此這篇關(guān)于SpringBoot中@Scheduled實現(xiàn)服務(wù)啟動時執(zhí)行一次的文章就介紹到這了,更多相關(guān)SpringBoot 服務(wù)啟動時執(zhí)行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot整合ehcache 實現(xiàn)支付超時限制的方法
在線支付系統(tǒng)需要極高的穩(wěn)定性,在有限的系統(tǒng)資源下,穩(wěn)定性優(yōu)先級要高于系統(tǒng)并發(fā)以及用戶體驗,因此需要合理的控制用戶的支付請求。下面通過本文給大家介紹springboot整合ehcache 實現(xiàn)支付超時限制的方法,一起看看吧2018-01-01
Mybatis實現(xiàn)數(shù)據(jù)的增刪改查實例(CRUD)
本篇文章主要介紹了Mybatis實現(xiàn)數(shù)據(jù)的增刪改查實例(CRUD),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
關(guān)于@Component注解下的類無法@Autowired問題
這篇文章主要介紹了關(guān)于@Component注解下的類無法@Autowired問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
劍指Offer之Java算法習(xí)題精講N叉樹的遍歷及數(shù)組與字符串
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化2022-03-03
Java利用redis zset實現(xiàn)延時任務(wù)詳解
zset作為redis的有序集合數(shù)據(jù)結(jié)構(gòu)存在,排序的依據(jù)就是score。本文就將利用zset score這個排序的這個特性,來實現(xiàn)延時任務(wù),感興趣的可以了解一下2022-08-08

