最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年09月19日 09:59:47   作者:畢小寶  
這篇文章主要介紹了SpringBoot 如何添加容器啟動的初始化邏輯,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

背景

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

技術(shù)轉(zhuǎn)換到 SpringBoot 的時候,該在哪里添加應(yīng)用初始化的代碼呢?

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

本文將介紹這兩個問題。

SpringBoot 啟動類和應(yīng)用監(jiān)聽器

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

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

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

@Component
public class InitContextListener implements ApplicationListener<ContextRefreshedEvent> {
 private static Logger logger = Logger.getLogger(InitContextListener.class);

 @Override
 public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
  // 設(shè)置全局配置信息文件存儲路徑
  String path = ClassUtils.getDefaultClassLoader().getResource("").getPath();
  logger.info("onApplicationEvent 項目部署路徑為:"+path);
  VersionManager.resourcePath = path;

  // TODO 應(yīng)用初始化邏輯,容器此時已啟動,getBean 獲取實例 OK
 }
}

IDEA 直接運行

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

在這里插入圖片描述
configure方法不會執(zhí)行,main 中的初始化邏輯會生效,onApplicationEvent 監(jiān)聽方法也會執(zhí)行。

war 包發(fā)布

打成 war 包后,啟動應(yīng)用,SpringBoot 的啟動類的 main 方法不會執(zhí)行,configure 方法中的初始化邏輯會生效,onApplicationEvent 監(jiān)聽方法也會執(zhí)行。

1、應(yīng)用啟動之前,先執(zhí)行 configure 方法:

在這里插入圖片描述

2、啟動之后的,onApplicationEvent 監(jiān)聽方法執(zhí)行:

在這里插入圖片描述

jar 包發(fā)布

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

1、應(yīng)用啟動之前,啟動類的 main 函數(shù) SpringApplication.run 之前的初始化信息:

在這里插入圖片描述

2、應(yīng)用啟動之后,啟動類的 main 函數(shù) SpringApplication.run 之后的初始化信息,onApplicationEvent 監(jiān)聽事件會執(zhí)行:

在這里插入圖片描述

啟示錄

記住一種就夠了,用 ApplicationListener 在容器啟動之后,添加應(yīng)用需要的初始化邏輯,本質(zhì)上跟定義一個開機啟動的 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>

方便極了!

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

相關(guān)文章

最新評論

宜丰县| 临湘市| 报价| 鄂温| 张家口市| 巴东县| 腾冲县| 荔波县| 聊城市| 陇南市| 香港 | 池州市| 灌南县| 翼城县| 高碑店市| 江孜县| 紫阳县| 工布江达县| 汝阳县| 长宁县| 平潭县| 洛川县| 黄浦区| 耿马| 民勤县| 高唐县| 湟中县| 平凉市| 长春市| 板桥市| 凤翔县| 长治市| 拉萨市| 祥云县| 临猗县| 新乡县| 崇州市| 巩留县| 博野县| 嘉善县| 建德市|