SpringBoot項(xiàng)目啟動(dòng)時(shí)執(zhí)行指定的方法
項(xiàng)目場(chǎng)景:
本文介紹Spring Boot項(xiàng)目啟動(dòng)時(shí)執(zhí)行指定的方法兩種常用方式和他們之間的區(qū)別。
實(shí)現(xiàn)方案:
方式一:使用注解@PostConstruct
@Component
public class PostConstructTest {
@PostConstruct
public void postConstruct() {
System.out.println("啟動(dòng)時(shí)自動(dòng)執(zhí)行 @PostConstruct 注解方法");
}
}優(yōu)點(diǎn): 簡(jiǎn)單方便,加上一個(gè)注解就行了。
缺點(diǎn):如果@PostConstruct方法內(nèi)的邏輯處理時(shí)間較長(zhǎng),就會(huì)增加SpringBoot應(yīng)用初始化Bean的時(shí)間,進(jìn)而增加應(yīng)用啟動(dòng)的時(shí)間。因?yàn)橹挥性贐ean初始化完成后,SpringBoot應(yīng)用才會(huì)打開端口提供服務(wù),所以在此之前,應(yīng)用不可訪問(wèn)。
建議:輕量的邏輯可放在Bean的@PostConstruct方法中,耗時(shí)長(zhǎng)的邏輯如果放在@PostConstruct方法中,可使用@Async異步方法。
使用異步代碼示例:
@Service
public class TestService {
@Async("testAsync") //指定線程池
public void test() {
System.out.println("------------------------異步方法開始 " + Thread.currentThread().getName());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("----------------異步方法執(zhí)行完了" + Thread.currentThread().getName());
}
}
@Component
public class PostConstructTest {
@Autowired
private TestService testService;
@PostConstruct
public void postConstruct() {
System.out.println("啟動(dòng)時(shí)自動(dòng)執(zhí)行 @PostConstruct 注解方法");
testService.test();
}
}Spring Boot中多個(gè)PostConstruct注解執(zhí)行順序控制
方式二:實(shí)現(xiàn)CommandLineRunner接口
@Component
public class CommandLineRunnerImpl implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("啟動(dòng)時(shí)自動(dòng)執(zhí)行 CommandLineRunner 的 run 方法");
}
}優(yōu)點(diǎn): 項(xiàng)目已經(jīng)初始化完畢,才會(huì)執(zhí)行方法,所以不用等這個(gè)方法執(zhí)行完,就可以正常提供服務(wù)了。
缺點(diǎn):暫未發(fā)現(xiàn)。
到此這篇關(guān)于SpringBoot項(xiàng)目啟動(dòng)時(shí)執(zhí)行指定的方法的文章就介紹到這了,更多相關(guān)SpringBoot項(xiàng)目啟動(dòng)時(shí)執(zhí)行指定內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot啟動(dòng)時(shí)自動(dòng)執(zhí)行指定方法的幾種實(shí)現(xiàn)方式
- IntelliJ IDEA下SpringBoot如何指定某一個(gè)配置文件啟動(dòng)項(xiàng)目
- springBoot?啟動(dòng)指定配置文件環(huán)境多種方案(最新推薦)
- IDEA下SpringBoot指定環(huán)境、配置文件啟動(dòng)操作過(guò)程
- SpringBoot啟動(dòng)時(shí)加載指定方法的方式小結(jié)
- SpringBoot啟動(dòng)時(shí)如何通過(guò)啟動(dòng)參數(shù)指定logback的位置
- springboot指定profiles啟動(dòng)失敗問(wèn)題及解決
- springboot 項(xiàng)目容器啟動(dòng)后如何自動(dòng)執(zhí)行指定方法
- springboot項(xiàng)目啟動(dòng)指定對(duì)應(yīng)環(huán)境的方法
相關(guān)文章
Java實(shí)現(xiàn)大數(shù)據(jù)量查詢處理的詳細(xì)方案介紹
在實(shí)際開發(fā)中,經(jīng)常遇到需要查詢大量數(shù)據(jù)的場(chǎng)景,例如訂單歷史數(shù)據(jù)導(dǎo)出,報(bào)表統(tǒng)計(jì)查詢等,這篇文章小編就和大家詳細(xì)介紹一下如何優(yōu)化該場(chǎng)景吧2026-01-01
Vert.x學(xué)習(xí)之Resilience4j原理與用法解讀
Resilience4j通過(guò)獨(dú)立線程和異步控制機(jī)制,為Vert.x提供了強(qiáng)大的容錯(cuò)能力,包括斷路器、重試、限流和超時(shí)控制,確保系統(tǒng)在面對(duì)故障時(shí)仍能穩(wěn)定運(yùn)行2026-01-01
Springcould多模塊搭建Eureka服務(wù)器端口過(guò)程詳解
這篇文章主要介紹了Springcould多模塊搭建Eureka服務(wù)器端口過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
logback使用MDCFilter日志過(guò)濾源碼解讀
這篇文章主要介紹了logback使用MDCFilter日志過(guò)濾源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
淺析Java Mail無(wú)法解析帶分號(hào)的收件人列表的問(wèn)題
JAVA MAIL嚴(yán)格按照RFC 822規(guī)范進(jìn)行操作,沒(méi)有對(duì)分號(hào)做處理。大多數(shù)郵件服務(wù)器都是嚴(yán)格遵循RFC 822規(guī)范的2013-08-08
springboot schedule 解決定時(shí)任務(wù)不執(zhí)行的問(wèn)題
這篇文章主要介紹了springboot schedule 解決定時(shí)任務(wù)不執(zhí)行的問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
Java數(shù)據(jù)結(jié)構(gòu)之鏈表(動(dòng)力節(jié)點(diǎn)之Java學(xué)院整理)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之鏈表(動(dòng)力節(jié)點(diǎn)之Java學(xué)院整理)的相關(guān)資料,需要的朋友可以參考下2017-04-04

