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

如何在Spring Boot啟動(dòng)時(shí)運(yùn)行定制的代碼

 更新時(shí)間:2018年12月02日 10:44:39   作者:banq  
在本文中您將學(xué)習(xí)如何掛鉤應(yīng)用程序引導(dǎo)程序生命周期并在Spring Boot啟動(dòng)時(shí)執(zhí)行代碼。文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Spring Boot會(huì)自動(dòng)為我們做很多配置,但遲早你需要做一些自定義工作。在本文中,您將學(xué)習(xí)如何掛鉤應(yīng)用程序引導(dǎo)程序生命周期并在Spring Boot啟動(dòng)時(shí)執(zhí)行代碼。

1.執(zhí)行bean初始化的方法

Spring啟動(dòng)應(yīng)用程序后運(yùn)行某些邏輯的最簡(jiǎn)單方法是將代碼作為所選bean引導(dǎo)過程的一部分來(lái)執(zhí)行。

只需創(chuàng)建一個(gè)類,將其標(biāo)記為Spring組件,并將應(yīng)用程序初始化代碼放在帶有@PostConstruct注釋的方法中。理論上,您可以使用構(gòu)造函數(shù)而不是單獨(dú)的方法,但將對(duì)象的構(gòu)造與其實(shí)際責(zé)任分開是一種很好的做法。

@Component
class AppInitializator {
 
  private static final Logger log = LoggerFactory.getLogger(AppInitializator.class);
 
  @PostConstruct
  private void init() {
    log.info("AppInitializator initialization logic ...");
    // ...
  }
 
}

還可以在主Spring Boot應(yīng)用程序類中創(chuàng)建一個(gè)帶有@PostConstruct注釋的方法。不要忘記主類也是框架管理的組件。

@SpringBootApplication
public class InitDemoApplication {
 
  // ...
 
  @PostConstruct
  private void init() {
    log.info("InitDemoApplication initialization logic ...");
    // ...
  }
 
}

但這種解決方案感覺就像是一種解決方法而不是真正的解決方案 您可以以非常有限的方式控制Spring框架創(chuàng)建應(yīng)用程序bean的順序。如果我們想在創(chuàng)建所有bean之前或甚至在框架啟動(dòng)之前運(yùn)行初始化邏輯,我們需要找到更好的東西。

2. Spring Boot啟動(dòng)掛鉤

使用Spring Boot創(chuàng)建的應(yīng)用程序的美妙之處在于,運(yùn)行它們所需的唯一內(nèi)容是Java Runtime Environment和命令行界面。無(wú)需外部工具或應(yīng)用程序。它就像常規(guī)的Java SE程序一樣運(yùn)行。

作為每個(gè)Java程序,您都可以在入口應(yīng)用程序類的靜態(tài)main方法中開始執(zhí)行此類應(yīng)用程序。這就是你可以掛鉤Spring Boot初始化過程的重點(diǎn)。

首先更改main方法中的代碼,以將啟動(dòng)掛鉤附加到單獨(dú)的方法中。您應(yīng)該在應(yīng)用程序啟動(dòng)之前添加Spring Boot掛鉤。

public static void main(String[] args) {
  SpringApplication application = new SpringApplication(InitDemoApplication.class);
  addInitHooks(application);
  application.run(args);
}
 
static void addInitHooks(SpringApplication application) {
  // TBD …
}

當(dāng)Spring Boot應(yīng)用程序啟動(dòng)時(shí),它會(huì)在引導(dǎo)過程的各個(gè)步驟上發(fā)布幾個(gè)事件。SpringApplication類的API公開了一個(gè)方法,我們可以使用該方法為這些事件添加偵聽器。

這是一個(gè)在Spring上下文開始創(chuàng)建bean之前發(fā)布的事件上運(yùn)行啟動(dòng)方法的示例:

static void addInitHooks(SpringApplication application) {
  application.addListeners((ApplicationListener<ApplicationEnvironmentPreparedEvent>) event -> {
    String version = event.getEnvironment().getProperty("java.runtime.version");
    log.info("Running with Java {}", version);
  });
}

根據(jù)事件類型,Spring傳遞給偵聽器的對(duì)象可以讓您訪問幾個(gè)有用的操作。在前面的示例中,我們讀取了一些環(huán)境屬性,但如果需要,我們也可以修改它。

以下是按啟動(dòng)時(shí)Spring Boot發(fā)布事件的順序排序的可能事件列表:

  • ApplicationStartingEvent
  • ApplicationEnvironmentPreparedEvent
  • ApplicationContextInitializedEvent
  • ApplicationPreparedEvent
  • ApplicationStartedEvent
  • ApplicationReadyEvent

根據(jù)我的經(jīng)驗(yàn),最重要的事件是ApplicationEnvironmentPreparedEvent。在Spring Boot啟動(dòng)的這個(gè)時(shí)刻,尚未創(chuàng)建bean,但您可以訪問整個(gè)應(yīng)用程序配置。通常,這是運(yùn)行一些自定義啟動(dòng)代碼的最佳時(shí)機(jī)。

3.在啟動(dòng)時(shí)但沒有運(yùn)行Tomcat時(shí)運(yùn)行代碼

盡管Spring Boot設(shè)計(jì)人員在創(chuàng)建框架時(shí)考慮了構(gòu)建胖JAR,但是一些開發(fā)人員仍然將Spring Boot應(yīng)用程序部署到常規(guī)的servlet容器(如Tomcat)。如果是這種情況,那么前一段中的解決方案將無(wú)法發(fā)揮作用。除非有增加額外步驟。

如果將應(yīng)用程序部署為常規(guī)WAR文件,則可能已經(jīng)擁有SpringBootServlerInitializator的自定義實(shí)現(xiàn)。您只需稍微擴(kuò)展它并添加初始化掛鉤作為應(yīng)用程序構(gòu)建過程的一部分。

您可以輕松地重用我們?cè)谥鲬?yīng)用程序類中創(chuàng)建的addInitHooks()方法。

public class InitDemoWarInitializer extends SpringBootServletInitializer {
 
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    InitDemoApplication.addInitHooks(builder.application());
    return builder.sources(InitDemoApplication.class);
  }
 
}

結(jié)論

簡(jiǎn)而言之,在Spring Boot啟動(dòng)時(shí)運(yùn)行代碼有兩個(gè)主要選項(xiàng)。最簡(jiǎn)單的一個(gè)設(shè)計(jì)用于初始化特定的bean。對(duì)于更多全局案例,該框架有一個(gè)專用解決方案,可以使用事件偵聽器掛鉤其生命周期。我們學(xué)習(xí)了如何實(shí)現(xiàn)和設(shè)置這樣的監(jiān)聽器。

在Github存儲(chǔ)庫(kù)中找到完全可用的演示

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Jmeter 中 CSV 如何參數(shù)化測(cè)試數(shù)據(jù)并實(shí)現(xiàn)自動(dòng)斷言示例詳解

    Jmeter 中 CSV 如何參數(shù)化測(cè)試數(shù)據(jù)并實(shí)現(xiàn)自動(dòng)斷言示例詳解

    這篇文章主要介紹了Jmeter 中 CSV 如何參數(shù)化測(cè)試數(shù)據(jù)并實(shí)現(xiàn)自動(dòng)斷言,本文通過示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java封裝數(shù)組之動(dòng)態(tài)數(shù)組實(shí)現(xiàn)方法詳解

    Java封裝數(shù)組之動(dòng)態(tài)數(shù)組實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Java封裝數(shù)組之動(dòng)態(tài)數(shù)組實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了java動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)原理、操作步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • Spring如何基于xml實(shí)現(xiàn)聲明式事務(wù)控制

    Spring如何基于xml實(shí)現(xiàn)聲明式事務(wù)控制

    這篇文章主要介紹了Spring如何基于xml實(shí)現(xiàn)聲明式事務(wù)控制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 徹底搞懂Java多線程(三)

    徹底搞懂Java多線程(三)

    這篇文章主要給大家介紹了關(guān)于Java面試題之多線程和高并發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Java中的對(duì)象和對(duì)象引用實(shí)例淺析

    Java中的對(duì)象和對(duì)象引用實(shí)例淺析

    這篇文章主要介紹了Java中的對(duì)象和對(duì)象引用,實(shí)例分析了對(duì)象與對(duì)象引用的概念與相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05
  • Java中Map集合中的Entry對(duì)象用法

    Java中Map集合中的Entry對(duì)象用法

    這篇文章主要介紹了Java中Map集合中的Entry對(duì)象用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-09-09
  • 小項(xiàng)目改造快速引入 mybatis的流程分析

    小項(xiàng)目改造快速引入 mybatis的流程分析

    這篇文章主要介紹了小項(xiàng)目改造快速引入 mybatis,功能方面非常簡(jiǎn)單,考慮到開發(fā)速度,直接按 springboot 項(xiàng)目進(jìn)行開發(fā),依賴方面僅僅使用 spring-boot-starter-web, spring-boot-starter-jdbc, sqljdbc4, lombook,需要的朋友可以參考下
    2022-05-05
  • Spring RestTemplate具體使用詳解

    Spring RestTemplate具體使用詳解

    這篇文章主要介紹了Spring RestTemplate具體使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2019-04-04
  • 解析Java圖形化編程中的文本框和文本區(qū)

    解析Java圖形化編程中的文本框和文本區(qū)

    這篇文章主要介紹了Java圖形化編程中的文本框和文本區(qū),是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • java實(shí)現(xiàn)象棋小游戲

    java實(shí)現(xiàn)象棋小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)象棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01

最新評(píng)論

永定县| 天台县| 芒康县| 溧水县| 隆化县| 康保县| 吴忠市| 阳西县| 于都县| 长子县| 平凉市| 竹山县| 平陆县| 盐津县| 安庆市| 定结县| 铁岭县| 新兴县| 介休市| 兴宁市| 乐东| 闽清县| 海晏县| 承德县| 台湾省| 安福县| 封开县| 类乌齐县| 江源县| 丹江口市| 瓮安县| 双江| 藁城市| 正镶白旗| 卢湾区| 团风县| 仙桃市| 凉山| 灵武市| 泸水县| 礼泉县|