麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Java > 正文

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

2024-07-14 08:42:59
字體:
供稿:網(wǎng)友

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

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

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

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

@Componentclass 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注釋的方法。不要忘記主類也是框架管理的組件。

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

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

2. Spring Boot啟動掛鉤

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

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

首先更改main方法中的代碼,以將啟動掛鉤附加到單獨(dú)的方法中。您應(yīng)該在應(yī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)用程序啟動時(shí),它會在引導(dǎo)過程的各個(gè)步驟上發(fā)布幾個(gè)事件。SpringApplication類的API公開了一個(gè)方法,我們可以使用該方法為這些事件添加偵聽器。

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

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傳遞給偵聽器的對象可以讓您訪問幾個(gè)有用的操作。在前面的示例中,我們讀取了一些環(huán)境屬性,但如果需要,我們也可以修改它。

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

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

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

3.在啟動時(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)。如果是這種情況,那么前一段中的解決方案將無法發(fā)揮作用。除非有增加額外步驟。

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

您可以輕松地重用我們在主應(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é)論

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

在Github存儲庫中找到完全可用的演示

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲综合91 | 国产精品呻吟 | 国产免费一级 | 色妞视频男女视频 | 女人解衣喂奶电影 | 少妇一级淫片免费放播放 | 国产色91 | 欧美日韩在线播放一区 | 国产精品久久久久永久免费 | 中文字幕一二三区芒果 | 理论片中文字幕 | 国产91av视频 | 蜜桃网站在线 | 国产日韩在线 | 一级黄色片武则天 | 成人一区久久 | 在线2区| 国产精品久久久不卡 | 毛片福利| 久久久久久久久久久av | 久久久久久久久久久久久久国产 | 被啪羞羞视频在线观看 | 91久久国产露脸精品国产 | 爱性久久久久久久 | 日本在线视频二区 | 91精品国产91久久久久久吃药 | 久久久久久久久国产 | 欧美成人se01短视频在线看 | 亚洲精品a在线观看 | 一区二区三区在线观看免费 | 亚洲精品在线观看免费 | 香蕉视频破解 | 91精品国产乱码久久久久久久久 | 九九热在线视频观看 | 成人一级黄色片 | 亚洲免费看片网站 | 99精品视频一区二区三区 | 91网址在线播放 | 麻豆视频在线观看 | 黄色7777| 免费看欧美一级特黄a大片 久久免费视频一区二区三区 |