欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決@PostConstruct注解導致的程序無法啟動(@PostConstruct的執(zhí)行)

 更新時間:2024年01月30日 10:19:17   作者:是菜菜的小嚴惜哎  
這篇文章主要介紹了解決@PostConstruct注解導致的程序無法啟動(@PostConstruct的執(zhí)行)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

樓主遇到一個問題,問題大概是這樣的

問題

1、業(yè)務原因,需要程序初始化啟動后自動執(zhí)行一個程序,這個程序處在一個死循環(huán)內(nèi),不會結(jié)束,保持自動執(zhí)行

2、程序啟動后,其他所有接口無法調(diào)用

處理及結(jié)果

然后我開始排查啊,排查啊

我先嘗試重啟服務,重新清空IDE的緩存,重啟電腦,換環(huán)境執(zhí)行,結(jié)果都不行

然后我在每個方法都打了斷點,開始執(zhí)行,這個時候問題開始露頭

我發(fā)現(xiàn)它走了@PostConstruct注解的方法,但是我這個方法是個死循環(huán),不會結(jié)束的?。?!

我大膽猜測,是否是因為@PostConstruct注解的方法未結(jié)束,導致的無法執(zhí)行

于是我寫了一個測試工程,進行測試,結(jié)果復現(xiàn)了這個問題!?。。。?!

我查閱了一下資料,大概明白了問題所在:

springboot啟動過程

springboot的bean加載的過程是這樣的,程序啟動時,springboot會把標記為bean的類或者接口自動進行全局的單例實例化,如果用戶指定標記了初始化的順序,springboot則會按照用戶指定的順序進行初始化,否則就會按照默認的順序進行初始化,在這個過程中,如果一個bean所在的類或者接口存在@PostConstruct注解,springboot就會在執(zhí)行完這個bean的構(gòu)造方法之后執(zhí)行標記有@PostConstruct注解的方法,然后實例化下一個bean

如果說,帶有@PostConstruct注解的方法執(zhí)行時間很長,那就會影響springboot對bean的實例化時間,進而就會間接影響到程序的初始化啟動,如果springboot不初始化完bean,是不會打開端口提供服務的,所以在@PostConstruct注解的方法執(zhí)行完之前,應用不可訪問

所以說,對于輕量級的邏輯,可以放在@PostConstruct注解的方法里,非常耗時的邏輯,可以考慮使用多線程處理,也可以放棄@PostConstruct注解,改用CommandLineRunner和ApplicationRunner 

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論