乾貨分享:Springboot的特性(微服務開發必知)

Java虛擬機 文章 技術 小裁縫先生 小裁縫先生 2017-08-27

在前面的幾篇文章中,我們主要講解了如何使用Springboot,如何修改端口,如何讀取配置文件,如何配置開發過程中的快速重啟以及springboot中的靜態資源。在學習以上內容之後,我們還需要對springboot的特新有所瞭解。接下來我們就說說是spingboot的特性,瞭解了這些特性可能會使你在開發過程中用更優雅的姿勢使用springboot。

啟動失敗

隨著大家使用springboot的時間的推移,一定會遇到很多啟動失敗,例如端口衝突,沒有對應的Bean,沒有對應配置參數等等。遇到這樣的問題,我們就要通過啟動失敗日誌來進行查看失敗原因。而對於springboot實現啟動失敗日誌是通過FailureAnalyzer接口來實現的。如果想實現自己的啟動失敗日誌分析處理,需要繼承AbstractFailureAnalyzer。

自定義Banner

在springboot的啟動日誌中,可以看到如下內容:

乾貨分享:Springboot的特性(微服務開發必知)

從SpringBootBanner源碼可以看出為什麼會是上面的圖形

乾貨分享:Springboot的特性(微服務開發必知)

上圖中顯示了一個“spring”的字樣,如果開發人員想為自己的項目設置能表達含義的字樣,可以在項目中加入banner.txt或者banner.gif,banner.jpg,banner.png。其中banner.gif(jpg,png)的優先級別要高於banner.txt.。我們在項目中放入顯示頭條號的圖片,顯示如下

乾貨分享:Springboot的特性(微服務開發必知)

除了在類路徑中加入文件,還可以在配置文件中配置文件路徑來實現:

banner.location:banner.txt的路徑

banner.image.location:banner.gif(png,jpg)圖片路徑

另外我們還可以配置這個圖像是否輸出以及輸出的路徑

sping.main.banner-mode:"off"/"console"/"log"

定製SpringApplication

開發人員可以通過SpringApplication的構造函數以及配置文件來定製自己的SpringApplication。比如定製banner這樣。

流利的構造器API

如果您需要構建一個ApplicationContext層次結構(具有父/子關係的多個上下文),或者如果你只想使用“流利”構建器API,則可以使用SpringApplicationBuilder。

乾貨分享:Springboot的特性(微服務開發必知)

應用程序事件和偵聽器

除了常見的Spring Framework事件(如ContextRefreshedEvent)之外,SpringApplication還會發送一些其他應用程序事件。

當應用程序運行時,應用程序事件按照下面順序發送:

ApplicationStartingEvent在運行開始時發送(在除了註冊偵聽器和初始化器之外的任何處理之前發送)

ApplicationEnvironmentPreparedEvent當上下文中要使用的環境已知但沒有創建上下文之前發送

ApplicationPreparedEvent在啟動刷新之前加載了bean定義之後發送

ApplicationReadyEvent在刷新之後被髮送,並且處理了任何相關的回調以指示應用程序準備好服務請求。

ApplicationFailedEvent在啟動發生異常時發送。

Web環境

SpringApplication將嘗試代表您創建正確類型的ApplicationContext。

默認情況下,將使用AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext,具體取決於您是否正在開發Web應用程序。

如果你想覆蓋默認的配置,你可以使用setEnvironment(boolean webEnvironment)來設置,當你設置為false時,這個程序只是一個JUnit 測試。

你也可以通過調用setApplicationContextClass(...)來完全控制ApplicationContext

訪問應用程序參數

如果需要訪問傳遞給SpringApplication.run(...)的參數,你可以注入org.springframework.boot.ApplicationArguments,可以通過選項以及非選項參數,實例如下

乾貨分享:Springboot的特性(微服務開發必知)

啟動參數,如下

乾貨分享:Springboot的特性(微服務開發必知)

訪問結果,如下

乾貨分享:Springboot的特性(微服務開發必知)

ApplicationRunner以及CommandLineRunner的使用

如果你需要在應用程序啟動後立即執行某個操作,可以實現ApplicationRunner或者CommandLineRunner兩個接口,這兩個接口都提供了一個run方法,這兩者的區別在於實現ApplicationRunner需要使用上面的方法獲取參數,而CommandLineRunner直接可以獲得參數

乾貨分享:Springboot的特性(微服務開發必知)

應用程序退出

每個SpringApplication與JVM註冊一個關閉鉤子,以確保ApplicationContext在退出時正常關閉。

另外,如果調用SpringApplication.exit()時希望返回一個特定的推出代碼,bean可以實現org.springframework.ExitCodeGeneretor接口

乾貨分享:Springboot的特性(微服務開發必知)

執行可以看到控制檯會輸出42

管理功能

可以通過指定spring.application.admin.enabled屬性為應用程序啟用與管理相關的功能。

到現在為止,我們就大概了講解了Springboot的特新,希望對大家有所幫助,謝謝閱讀。下一篇我會分享springboot中webservice的使用,希望大家多多關注。

相關推薦

推薦中...