av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術文章
文章詳情頁

SpringBoot 如何添加容器啟動的初始化邏輯的操作方法

瀏覽:3日期:2023-04-22 15:50:00

背景

傳統 SpringMVC 項目中,我們可以定義容器初始化 Servlet ,然后在 web.xml 配置該 Servlet ,指定 load-on-startup 就可以在容器啟動后,執行一些系統的初始化邏輯。比如設置全局資源文件路徑、加載系統定時任務、數據初始化等。

技術轉換到 SpringBoot 的時候,該在哪里添加應用初始化的代碼呢?

如果初始化邏輯中,有一些普通類,需要通過 Spring 的 ApplicationContext 的 getBean 獲取依賴屬性,如何保證 Spring 容器已經完成初始化完成、getBean 不會出現空指針呢?

本文將介紹這兩個問題。

SpringBoot 啟動類和應用監聽器

首先,SpringBoot 啟動類中可以添加應用的初始化邏輯,但是打包方式不同,添加的地方也有差異。

jar 包:使用內嵌 Tomcat 時,可以直接寫在 main 函數中,且 SpringApplication.run 代碼之前,容器未啟動,此時無法獲取 getBean 實例。war 包:外部部署時,main 函數中的方法不會被執行,可以在 configure 方法中添加初始化邏輯,此時容器未啟動,無法獲取 getBean 實例。

其次,就是自定義容器啟動監聽器類,為其添加 @Componnet 注解:

@Componentpublic class InitContextListener implements ApplicationListener<ContextRefreshedEvent> { private static Logger logger = Logger.getLogger(InitContextListener.class); @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { // 設置全局配置信息文件存儲路徑 String path = ClassUtils.getDefaultClassLoader().getResource('').getPath(); logger.info('onApplicationEvent 項目部署路徑為:'+path); VersionManager.resourcePath = path; // TODO 應用初始化邏輯,容器此時已啟動,getBean 獲取實例 OK }}

IDEA 直接運行

IDEA 中直接運行 SpringBoot 的啟動類,它會執行初始化邏輯:

SpringBoot 如何添加容器啟動的初始化邏輯的操作方法configure方法不會執行,main 中的初始化邏輯會生效,onApplicationEvent 監聽方法也會執行。

war 包發布

打成 war 包后,啟動應用,SpringBoot 的啟動類的 main 方法不會執行,configure 方法中的初始化邏輯會生效,onApplicationEvent 監聽方法也會執行。

1、應用啟動之前,先執行 configure 方法:

SpringBoot 如何添加容器啟動的初始化邏輯的操作方法

2、啟動之后的,onApplicationEvent 監聽方法執行:

SpringBoot 如何添加容器啟動的初始化邏輯的操作方法

jar 包發布

打成 jar 包,跟直接運行 IDEA 的結果一樣。

1、應用啟動之前,啟動類的 main 函數 SpringApplication.run 之前的初始化信息:

SpringBoot 如何添加容器啟動的初始化邏輯的操作方法

2、應用啟動之后,啟動類的 main 函數 SpringApplication.run 之后的初始化信息,onApplicationEvent 監聽事件會執行:

SpringBoot 如何添加容器啟動的初始化邏輯的操作方法

啟示錄

記住一種就夠了,用 ApplicationListener 在容器啟動之后,添加應用需要的初始化邏輯,本質上跟定義一個開機啟動的 Servlet 一樣。

只是用 SpringBoot 之后,一個 @Component 注解,就可以替代 web.xml 中對 Servelt 的配置:

<!-- 配置初始化啟動線程 --><servlet><servlet-name>initServlet</servlet-name><servlet-class>Xxx.InitContexServlet</servlet-class><load-on-startup>3</load-on-startup></servlet>

方便極了!

到此這篇關于SpringBoot 如何添加容器啟動的初始化邏輯的文章就介紹到這了,更多相關SpringBoot 添加容器啟動的初始化邏輯內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 成在线人视频免费视频 | 亚州春色| 999精品视频在线观看 | 一区二区三区四区av | 日韩欧美国产一区二区三区 | 国产成人综合在线 | 色网站在线免费观看 | 一区二区三区日本 | 男女午夜免费视频 | 午夜天堂精品久久久久 | 久久久久国产一区二区三区 | 亚洲欧洲一区二区 | 久久精品这里精品 | 欧美日韩在线免费观看 | 成人免费一区二区三区牛牛 | 欧美专区在线 | 四虎精品在线 | 中文字幕一区二区三区精彩视频 | www.国产.com | 欧美一级在线观看 | 亚洲一区二区精品 | 精品一二三 | 麻豆精品国产91久久久久久 | 欧美日韩视频 | 九九久久国产 | 韩日一区二区 | 欧美性生交大片免费 | 国产乱码久久久久久 | 一区二区三区在线播放 | 天天精品综合 | 日韩欧美网 | 久久精品—区二区三区 | 国产精品欧美精品 | 国产欧美精品区一区二区三区 | 福利精品在线观看 | 精品日韩一区二区 | 亚洲一区二区三区在线播放 | 色综合久 | 粉色午夜视频 | 久久精品成人 | 免费午夜电影 |