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

SpringBoot 如何添加容器啟動(dòng)的初始化邏輯的操作方法

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

背景

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

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

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

本文將介紹這兩個(gè)問題。

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

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

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

其次,就是自定義容器啟動(dòng)監(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è)置全局配置信息文件存儲(chǔ)路徑
  String path = ClassUtils.getDefaultClassLoader().getResource("").getPath();
  logger.info("onApplicationEvent 項(xiàng)目部署路徑為:"+path);
  VersionManager.resourcePath = path;

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

IDEA 直接運(yùn)行

IDEA 中直接運(yùn)行 SpringBoot 的啟動(dòng)類,它會(huì)執(zhí)行初始化邏輯:

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

war 包發(fā)布

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

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

在這里插入圖片描述

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

在這里插入圖片描述

jar 包發(fā)布

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

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

在這里插入圖片描述

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

在這里插入圖片描述

啟示錄

記住一種就夠了,用 ApplicationListener 在容器啟動(dòng)之后,添加應(yīng)用需要的初始化邏輯,本質(zhì)上跟定義一個(gè)開機(jī)啟動(dòng)的 Servlet 一樣。

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

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

方便極了!

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

相關(guān)文章

  • Spring Boot學(xué)習(xí)入門之AOP處理請(qǐng)求詳解

    Spring Boot學(xué)習(xí)入門之AOP處理請(qǐng)求詳解

    AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù),下面這篇文章主要給大家介紹了關(guān)于Spring Boot學(xué)習(xí)入門之AOP處理請(qǐng)求的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09
  • Java中的Kafka為什么性能這么快及4大核心詳析

    Java中的Kafka為什么性能這么快及4大核心詳析

    這篇文章主要介紹了Java中的Kafka為什么性能這么快及4大核心詳析,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Java設(shè)計(jì)模式編程中的工廠方法模式和抽象工廠模式

    Java設(shè)計(jì)模式編程中的工廠方法模式和抽象工廠模式

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中的工廠方法模式和抽象工廠模式,設(shè)計(jì)模式的建立有利于團(tuán)隊(duì)協(xié)作時(shí)代碼的共同維護(hù),需要的朋友可以參考下
    2016-01-01
  • Java實(shí)現(xiàn)導(dǎo)入csv的示例代碼

    Java實(shí)現(xiàn)導(dǎo)入csv的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)導(dǎo)入csv的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Java算法之串的簡(jiǎn)單處理

    Java算法之串的簡(jiǎn)單處理

    今天小編就為大家分享一篇關(guān)于Java算法之串的簡(jiǎn)單處理,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • springboot各種下載文件的方式匯總

    springboot各種下載文件的方式匯總

    下載功能其實(shí)就是用戶輸入指定文件路徑信息,然后把文件返回給用戶,下面這篇文章主要給大家介紹了關(guān)于springboot各種下載文件的方式,需要的朋友可以參考下
    2022-10-10
  • Spring Boot中@value的常見用法及案例

    Spring Boot中@value的常見用法及案例

    @Value注解是Spring框架中強(qiáng)大且常用的注解之一,本文主要介紹了SpringBoot中@value的常見用法及案例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Spring中BeanFactory與FactoryBean接口的區(qū)別詳解

    Spring中BeanFactory與FactoryBean接口的區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于Spring中BeanFactory與FactoryBean接口的區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • kafka springBoot配置的實(shí)現(xiàn)

    kafka springBoot配置的實(shí)現(xiàn)

    本文主要介紹了kafka springBoot配置的實(shí)現(xiàn),通過詳細(xì)解析Spring Boot for Apache Kafka的配置選項(xiàng),以及如何優(yōu)化Kafka生產(chǎn)者和消費(fèi)者的屬性設(shè)置,感興趣的可以了解一下
    2023-11-11
  • Spring純注解配置實(shí)現(xiàn)代碼示例解析

    Spring純注解配置實(shí)現(xiàn)代碼示例解析

    這篇文章主要介紹了Spring純注解配置實(shí)現(xiàn)代碼示例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論