這篇文章主要介紹怎么在Spring Boot啟動時運行定制,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

做網(wǎng)站、成都網(wǎng)站制作介紹好的網(wǎng)站是理念、設(shè)計和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)擁有的網(wǎng)站設(shè)計理念、多方位的設(shè)計風格、經(jīng)驗豐富的設(shè)計團隊。提供PC端+手機端網(wǎng)站建設(shè),用營銷思維進行網(wǎng)站設(shè)計、采用先進技術(shù)開源代碼、注重用戶體驗與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:空間域名、虛擬主機、營銷軟件、網(wǎng)站建設(shè)、臺江網(wǎng)站維護、網(wǎng)站推廣。
Spring Boot會自動為我們做很多配置,但遲早你需要做一些自定義工作。在本文中,您將學習如何掛鉤應(yīng)用程序引導程序生命周期并在Spring Boot啟動時執(zhí)行代碼。
1.執(zhí)行bean初始化的方法
Spring啟動應(yīng)用程序后運行某些邏輯的最簡單方法是將代碼作為所選bean引導過程的一部分來執(zhí)行。
只需創(chuàng)建一個類,將其標記為Spring組件,并將應(yīng)用程序初始化代碼放在帶有@PostConstruct注釋的方法中。理論上,您可以使用構(gòu)造函數(shù)而不是單獨的方法,但將對象的構(gòu)造與其實際責任分開是一種很好的做法。
@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)建一個帶有@PostConstruct注釋的方法。不要忘記主類也是框架管理的組件。
@SpringBootApplication
public class InitDemoApplication {
// ...
@PostConstruct
private void init() {
log.info("InitDemoApplication initialization logic ...");
// ...
}
}但這種解決方案感覺就像是一種解決方法而不是真正的解決方案 您可以以非常有限的方式控制Spring框架創(chuàng)建應(yīng)用程序bean的順序。如果我們想在創(chuàng)建所有bean之前或甚至在框架啟動之前運行初始化邏輯,我們需要找到更好的東西。
2. Spring Boot啟動掛鉤
使用Spring Boot創(chuàng)建的應(yīng)用程序的美妙之處在于,運行它們所需的唯一內(nèi)容是Java Runtime Environment和命令行界面。無需外部工具或應(yīng)用程序。它就像常規(guī)的Java SE程序一樣運行。
作為每個Java程序,您都可以在入口應(yīng)用程序類的靜態(tài)main方法中開始執(zhí)行此類應(yīng)用程序。這就是你可以掛鉤Spring Boot初始化過程的重點。
首先更改main方法中的代碼,以將啟動掛鉤附加到單獨的方法中。您應(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 …
}當Spring Boot應(yīng)用程序啟動時,它會在引導過程的各個步驟上發(fā)布幾個事件。SpringApplication類的API公開了一個方法,我們可以使用該方法為這些事件添加偵聽器。
這是一個在Spring上下文開始創(chuàng)建bean之前發(fā)布的事件上運行啟動方法的示例:
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傳遞給偵聽器的對象可以讓您訪問幾個有用的操作。在前面的示例中,我們讀取了一些環(huán)境屬性,但如果需要,我們也可以修改它。
以下是按啟動時Spring Boot發(fā)布事件的順序排序的可能事件列表:
ApplicationStartingEvent
ApplicationEnvironmentPreparedEvent
ApplicationContextInitializedEvent
ApplicationPreparedEvent
ApplicationStartedEvent
ApplicationReadyEvent
根據(jù)我的經(jīng)驗,最重要的事件是ApplicationEnvironmentPreparedEvent。在Spring Boot啟動的這個時刻,尚未創(chuàng)建bean,但您可以訪問整個應(yīng)用程序配置。通常,這是運行一些自定義啟動代碼的最佳時機。
3.在啟動時但沒有運行Tomcat時運行代碼
盡管Spring Boot設(shè)計人員在創(chuàng)建框架時考慮了構(gòu)建胖JAR,但是一些開發(fā)人員仍然將Spring Boot應(yīng)用程序部署到常規(guī)的servlet容器(如Tomcat)。如果是這種情況,那么前一段中的解決方案將無法發(fā)揮作用。除非有增加額外步驟。
如果將應(yīng)用程序部署為常規(guī)WAR文件,則可能已經(jīng)擁有SpringBootServlerInitializator的自定義實現(xiàn)。您只需稍微擴展它并添加初始化掛鉤作為應(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);
}
}以上是“怎么在Spring Boot啟動時運行定制”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享文章:怎么在SpringBoot啟動時運行定制
網(wǎng)頁鏈接:http://chinadenli.net/article46/phdehg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、品牌網(wǎng)站制作、外貿(mào)建站、定制開發(fā)、品牌網(wǎng)站設(shè)計、手機網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)