一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - SpringBoot 如何添加容器啟動的初始化邏輯的操作方法

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

2020-09-19 15:55畢小寶 JAVA教程

這篇文章主要介紹了SpringBoot 如何添加容器啟動的初始化邏輯,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

背景

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

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

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

本文將介紹這兩個問題。

SpringBoot 啟動類和應用監聽器

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Component
public 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 的配置:

?
1
2
3
4
5
6
7
8
<!-- 配置初始化啟動線程 -->
    <servlet>
        <servlet-name>initServlet</servlet-name>
        <servlet-class>
            Xxx.InitContexServlet
        </servlet-class>
        <load-on-startup>3</load-on-startup>
    </servlet>

方便極了!

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

原文鏈接:https://blog.csdn.net/wojiushiwo945you/article/details/108634183

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品极品美女自在线 | 亚洲国产成人久久综合一区 | 日韩精品免费一区二区 | 青草社区视频 | 男人的天堂在线观看免费 | 国产精品第 | 久久精品国产色蜜蜜麻豆国语版 | 久久视频在线视频观看精品15 | 久久伊人影院 | 日韩激情视频在线观看 | 极品在线 | 91美女在线视频 | naruto tube18动漫 mm131亚洲精品久久 | 国产欧美综合一区二区 | 免费黄色片在线观看 | 波多野结衣在线免费观看 | 91po国产在线高清福利 | 亚洲国产精品久久久久 | xnxx动漫| 国内精品久久久久影院网站 | acg火影忍者熟密姬纲手h | 色综合天天五月色 | brazzersvideo欧美最新 | 亚洲欧洲日产v特级毛片 | 黑人巨鞭大战白妞10级 | 超h 超重口 高h 污肉1v1 | kkkk4444在线看片免费 | 亚洲 在线 日韩 欧美 | 亚洲国产精品久久人人爱 | 国产高清免费午夜在线视频 | 性xxxx欧美高清 | 日本高清免费中文字幕不卡 | 欧美不卡一区二区三区 | 亚洲国产成人精品无码区99 | 久久精品国产久精国产果冻传媒 | 12一14性水蜜桃 | 91无套极品外围在线播放 | 嫩草视频在线观看视频播放 | 1377大但人文艺术包子铺 | 四虎影视永久在线观看 | 亚洲情射 |