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ì)打開(kāi)端口提供服務(wù),所以在此之前,應(yīng)用不可訪問(wèn)。
建議:輕量的邏輯可放在Bean的@PostConstruct方法中,耗時(shí)長(zhǎng)的邏輯如果放在@PostConstruct方法中,可使用@Async異步方法。
使用異步代碼示例:
@Service public class TestService { @Async("testAsync") //指定線程池 public void test() { System.out.println("------------------------異步方法開(kāi)始 " + 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)文章
Spring?Bean注冊(cè)與注入實(shí)現(xiàn)方法詳解
首先,要學(xué)習(xí)Spring中的Bean的注入方式,就要先了解什么是依賴注入。依賴注入是指:讓調(diào)用類(lèi)對(duì)某一接口的實(shí)現(xiàn)類(lèi)的實(shí)現(xiàn)類(lèi)的依賴關(guān)系由第三方注入,以此來(lái)消除調(diào)用類(lèi)對(duì)某一接口實(shí)現(xiàn)類(lèi)的依賴。Spring容器中支持的依賴注入方式主要有屬性注入、構(gòu)造函數(shù)注入、工廠方法注入2022-10-10圖解Java?ReentrantLock的條件變量Condition機(jī)制
想必大家都使用過(guò)wait()和notify()這兩個(gè)方法把,他們主要用于多線程間的協(xié)同處理。而RenentrantLock也支持這樣條件變量的能力,而且相對(duì)于synchronized?更加強(qiáng)大,能夠支持多個(gè)條件變量,本文就來(lái)詳細(xì)說(shuō)說(shuō)2022-10-10SpringBoot?使用?Sa-Token?完成注解鑒權(quán)功能(權(quán)限校驗(yàn))
Sa-Token?是一個(gè)輕量級(jí)?java?權(quán)限認(rèn)證框架,主要解決登錄認(rèn)證、權(quán)限認(rèn)證、單點(diǎn)登錄、OAuth2、微服務(wù)網(wǎng)關(guān)鑒權(quán)?等一系列權(quán)限相關(guān)問(wèn)題,這篇文章主要介紹了SpringBoot使用Sa-Token完成注解鑒權(quán)功能,需要的朋友可以參考下2023-05-05Spring常見(jiàn)錯(cuò)誤之Web嵌套對(duì)象校驗(yàn)失效解決辦法
這篇文章主要介紹了Spring常見(jiàn)錯(cuò)誤之Web嵌套對(duì)象校驗(yàn)失效解決的相關(guān)資料,通過(guò)在Phone對(duì)象上添加@Valid注解,問(wèn)題得以解決,需要的朋友可以參考下2025-01-01Springboot集成Jasypt實(shí)現(xiàn)配置文件加密的方法
Jasypt是一個(gè)java庫(kù),它允許開(kāi)發(fā)員以最少的努力為他/她的項(xiàng)目添加基本的加密功能,并且不需要對(duì)加密工作原理有深入的了解,這篇文章主要介紹了Springboot集成Jasypt實(shí)現(xiàn)配置文件加密,需要的朋友可以參考下2023-04-04