亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

如何在Spring Boot啟動時運行定制的代碼

2024-07-14 08:42:59
字體:
來源:轉載
供稿:網友

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

1.執行bean初始化的方法

Spring啟動應用程序后運行某些邏輯的最簡單方法是將代碼作為所選bean引導過程的一部分來執行。

只需創建一個類,將其標記為Spring組件,并將應用程序初始化代碼放在帶有@PostConstruct注釋的方法中。理論上,您可以使用構造函數而不是單獨的方法,但將對象的構造與其實際責任分開是一種很好的做法。

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

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

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

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

2. Spring Boot啟動掛鉤

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

作為每個Java程序,您都可以在入口應用程序類的靜態main方法中開始執行此類應用程序。這就是你可以掛鉤Spring Boot初始化過程的重點。

首先更改main方法中的代碼,以將啟動掛鉤附加到單獨的方法中。您應該在應用程序啟動之前添加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 …}

當Spring Boot應用程序啟動時,它會在引導過程的各個步驟上發布幾個事件。SpringApplication類的API公開了一個方法,我們可以使用該方法為這些事件添加偵聽器。

這是一個在Spring上下文開始創建bean之前發布的事件上運行啟動方法的示例:

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

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

以下是按啟動時Spring Boot發布事件的順序排序的可能事件列表:

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

根據我的經驗,最重要的事件是ApplicationEnvironmentPreparedEvent。在Spring Boot啟動的這個時刻,尚未創建bean,但您可以訪問整個應用程序配置。通常,這是運行一些自定義啟動代碼的最佳時機。

3.在啟動時但沒有運行Tomcat時運行代碼

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

如果將應用程序部署為常規WAR文件,則可能已經擁有SpringBootServlerInitializator的自定義實現。您只需稍微擴展它并添加初始化掛鉤作為應用程序構建過程的一部分。

您可以輕松地重用我們在主應用程序類中創建的addInitHooks()方法。

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

結論

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
高清欧美性猛交| 亚洲第一av在线| 日本aⅴ大伊香蕉精品视频| 亚洲娇小xxxx欧美娇小| 午夜欧美不卡精品aaaaa| 色琪琪综合男人的天堂aⅴ视频| 久久精品视频播放| 亚洲视频网站在线观看| 欧美激情aaaa| 久久久久北条麻妃免费看| 91视频国产高清| 亚洲精品网站在线播放gif| www国产亚洲精品久久网站| 欧美一级免费视频| 亚洲自拍高清视频网站| 国产盗摄xxxx视频xxx69| 久久91精品国产91久久跳| 欧美日韩在线视频一区二区| 国产精品96久久久久久| 久久精品久久久久久国产 免费| 欧美大学生性色视频| 欧美亚洲国产日韩2020| 911国产网站尤物在线观看| 欧美视频在线观看 亚洲欧| 欧美午夜xxx| 国产成人精品免高潮在线观看| 92看片淫黄大片欧美看国产片| 97在线免费观看视频| 亚洲午夜精品久久久久久性色| 日韩av在线免费播放| 日韩资源在线观看| 国产日韩在线看片| 草民午夜欧美限制a级福利片| 精品国产一区二区三区久久狼黑人| 国产精品jizz在线观看麻豆| 精品美女国产在线| 欧美黄色成人网| 国产v综合ⅴ日韩v欧美大片| 欧美区在线播放| 久久视频在线免费观看| 日韩欧美精品免费在线| 亚洲国产精品一区二区久| 国产69精品久久久久久| 国产精品久久久久久久av电影| 亚洲日本成人网| 动漫精品一区二区| 国产精品久久久久久久久久东京| 美女黄色丝袜一区| 98视频在线噜噜噜国产| 92国产精品视频| 久久久久久999| 成人女保姆的销魂服务| 欧洲精品在线视频| 日韩中文字幕不卡视频| 色先锋久久影院av| 国产成人精品一区二区| 综合欧美国产视频二区| 中文字幕日韩欧美在线视频| 在线观看欧美成人| 欧美性受xxxx白人性爽| 亚洲欧美国产日韩中文字幕| 中文综合在线观看| 欧美一级视频一区二区| 亚洲香蕉伊综合在人在线视看| 国产精品va在线播放| 亚洲视频在线观看免费| 欧美—级a级欧美特级ar全黄| 日韩精品免费综合视频在线播放| 日韩av电影在线网| 久久久国产精品免费| 88国产精品欧美一区二区三区| 久久成人免费视频| 久久中文精品视频| 91av在线不卡| 日韩精品在线第一页| 俺去了亚洲欧美日韩| www.亚洲男人天堂| 久久99久久久久久久噜噜| 亚洲成年人影院在线| 性欧美办公室18xxxxhd| 日韩在线播放一区| 色小说视频一区| 青草青草久热精品视频在线观看| 欧美成人午夜剧场免费观看| 亚洲国产高潮在线观看| 亚洲欧美日韩视频一区| 久久久久久久久久久免费精品| 欧美在线观看www| 91日本在线观看| 日韩av一区二区在线观看| 欧美午夜电影在线| 成人久久18免费网站图片| 欧美一区二区三区图| 九九热这里只有精品6| 国产亚洲精品久久久久久牛牛| 欧美精品18videosex性欧美| 国产在线精品一区免费香蕉| 日本高清不卡在线| 国内精品久久久久久久久| 国产欧美日韩精品在线观看| 精品亚洲aⅴ在线观看| 北条麻妃在线一区二区| 欧美亚洲日本网站| 91久久久久久久久| 国产精品视频区| 国产欧美一区二区三区久久| 97久久国产精品| 欧美亚州一区二区三区| 亚洲男人天堂2019| 中文字幕日韩av电影| 中文字幕日韩电影| 中文字幕精品视频| 亚洲精品理论电影| 欧美一区亚洲一区| 欧美自拍视频在线| 久久精品中文字幕| 色婷婷综合久久久久| 在线视频免费一区二区| 亚洲欧美国产日韩天堂区| 久久精品国产一区| 久久久久久久网站| 国自产精品手机在线观看视频| 97在线免费观看视频| 中文字幕最新精品| 久久久久久国产精品三级玉女聊斋| 国产精品美女免费| 日韩av在线看| 日韩av三级在线观看| 久久久久久九九九| 不用播放器成人网| 国产精品国产亚洲伊人久久| 热re99久久精品国产66热| 欧美日韩在线观看视频| 久久免费在线观看| 午夜精品久久久久久99热| 亚洲第一精品夜夜躁人人爽| 亚洲人精选亚洲人成在线| 国产成人精品在线播放| 国产亚洲欧美一区| 国产欧美精品一区二区三区介绍| 久久久精品2019中文字幕神马| 久久免费福利视频| 久久久久国产一区二区三区| 91久久久亚洲精品| 欧美日韩中国免费专区在线看| 亚洲电影免费观看高清完整版在线观看| 久久久久久久久久亚洲| 亚洲激情视频在线| 精品久久久久久久久久国产| 日韩欧美在线视频日韩欧美在线视频| 国产精品日韩在线播放| 欧美激情一区二区三区高清视频| 日韩小视频网址| 综合欧美国产视频二区| 国产欧美精品xxxx另类| 成人免费高清完整版在线观看| 亚洲欧洲国产伦综合| 国产美女主播一区| 中文字幕不卡av| 中文字幕一区日韩电影| 午夜精品久久久久久久99黑人| 欧美日韩一区二区免费视频| 成人亲热视频网站| zzijzzij亚洲日本成熟少妇|