溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SpringBoot 實現(xiàn)添加容器啟動的初始化邏輯的方法

發(fā)布時間:2020-11-03 16:23:14 來源:億速云 閱讀:254 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)SpringBoot 實現(xiàn)添加容器啟動的初始化邏輯的方法,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

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í)行初始化邏輯:

SpringBoot 實現(xiàn)添加容器啟動的初始化邏輯的方法
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 方法:

SpringBoot 實現(xiàn)添加容器啟動的初始化邏輯的方法

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

SpringBoot 實現(xiàn)添加容器啟動的初始化邏輯的方法

jar 包發(fā)布

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

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

SpringBoot 實現(xiàn)添加容器啟動的初始化邏輯的方法

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

SpringBoot 實現(xiàn)添加容器啟動的初始化邏輯的方法

啟示錄

記住一種就夠了,用 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>

上述就是小編為大家分享的SpringBoot 實現(xiàn)添加容器啟動的初始化邏輯的方法了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI