真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在SpringBoot啟動(dòng)時(shí)運(yùn)行定制

這篇文章主要介紹怎么在Spring Boot啟動(dòng)時(shí)運(yùn)行定制,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

做網(wǎng)站、成都網(wǎng)站制作介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營(yíng)銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開(kāi)源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺(jué)化效果。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、臺(tái)江網(wǎng)站維護(hù)、網(wǎng)站推廣。

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)過(guò)程的一部分來(lái)執(zhí)行。

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

@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 ...");
    // ...
  }
 
}

但這種解決方案感覺(jué)就像是一種解決方法而不是真正的解決方案 您可以以非常有限的方式控制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方法中開(kāi)始執(zhí)行此類應(yīng)用程序。這就是你可以掛鉤Spring Boot初始化過(guò)程的重點(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)過(guò)程的各個(gè)步驟上發(fā)布幾個(gè)事件。SpringApplication類的API公開(kāi)了一個(gè)方法,我們可以使用該方法為這些事件添加偵聽(tīng)器。

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

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

根據(jù)事件類型,Spring傳遞給偵聽(tīng)器的對(duì)象可以讓您訪問(wèn)幾個(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,但您可以訪問(wèn)整個(gè)應(yīng)用程序配置。通常,這是運(yùn)行一些自定義啟動(dòng)代碼的最佳時(shí)機(jī)。

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

盡管Spring Boot設(shè)計(jì)人員在創(chuàng)建框架時(shí)考慮了構(gòu)建胖JAR,但是一些開(kāi)發(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)建過(guò)程的一部分。

您可以輕松地重用我們?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);
  }
 
}

以上是“怎么在Spring Boot啟動(dòng)時(shí)運(yùn)行定制”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享名稱:怎么在SpringBoot啟動(dòng)時(shí)運(yùn)行定制
網(wǎng)站URL:http://weahome.cn/article/phdehg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部