Spring Boot基本上是Spring框架的擴展,它消除了設置Spring應用程序所需的XML配置,為更快,更高效的開發生態系統鋪平了道路。以下是Spring Boot中的一些特點:
1:創建獨立的spring應用。
2:嵌入Tomcat, Jetty Undertow 而且不需要部署他們。
3:提供的“starters” poms來簡化Maven配置
4:盡可能自動配置spring應用。
5:提供生產指標,健壯檢查和外部化配置
6:絕對沒有代碼生成和XML配置要求
springboot1.0和springboot2.0
1.WebMvcConfigurerAdapter這個抽象類已經過時。因為SpringBoot的 2.0 及其以上版本最低支持Java 8,而Java 8 中有個新特性就是default關鍵字。
因為Java8里面對於接口可以寫默認方法所以對WebMvcConfigurerAdapter的上層接口WebMvcConfigurer進行了改進,將里面的所以方法改成了默認方法,但無實現。我們可以直接繼承WebMvcConfigurer 接口然后實現他的default方法即可。
WebMvcConfigurerAdapter 可以用 WebMvcConfigurationSupport 替代,但是不推薦使用WebMvcConfigurationSupport這個類會全面接管對SpringMVC的配置,即SpringBoot對SpringMVC的自動配置全部失效,只使用用戶對SpringMVC的配置。
2.SpringBoot1.X 配置的攔截器對靜態資源是默認放行的,而SpringBoot 2.X版本的攔截器不會對靜態資源默認放行,也會進行攔截。如果想要使用靜態資源就必須排除靜態資源的請求路徑。
springboot2.1
1.優化應用程序啟動速度,啟動時占用的內存更少。在Spring Data JPA中設置spring.data. JPA . repositori.bootstrap .bootstrap-mode=deferred時,Hibernate將在單獨的線程啟動,而應用程序的其余組件將會並行啟動。
2.支持Java11並且兼容Java8。
3.提供了應用程序緩存管理信息和提供Spring集成組件的圖表信息。
springboot2.2
1.Spring Boot 2.2.0 的性能獲得了很大的提升。現在,應用程序啟動速度更快,並且消耗的內存更少。這在具有非常嚴格的內存約束的環境中特別有用。
2.現在可以通過 spring.main.lazy-initialization 屬性啟用全局延遲初始化,以減少啟動時間。但是在進行任何延遲的初始化時,HTTP 請求的處理可能需要更長的時間;通常在啟動時會發生的故障現在在啟動后才會出現。
3.支持 Java 13,同時仍與 Java 11 和 8 兼容
4.配置屬性現在支持基於構造函數的綁定,該綁定使 @ConfigurationProperties 注釋的類不可變。可以通過使用 @ConstructorBinding 注釋 @ConfigurationProperties 類或其構造函數之一來啟用基於構造函數的綁定。可以在配置屬性綁定提供的構造函數參數上使用 @DefaultValue 和 @DateTimeFormat 之類的注釋。
springboot2.3
1.正常(優雅)停機
什么是正常(優雅)停機?
所有四個嵌入式Web服務器(Jetty,Reactor Netty,Tomcat和Undertow)以及響應式和基於Servlet的Web應用程序均支持正常關機。它作為關閉應用程序上下文的一部分發生,並在停止SmartLifecyclebean 的最早階段執行。此停止處理使用一個超時,該超時提供一個寬限期,在此寬限期內,現有請求將被允許完成,但新請求將不被允許。不允許新請求的確切方式因所使用的Web服務器而異。Jetty,Reactor Netty和Tomcat將停止在網絡層接受請求。Undertow將接受請求,但會立即以服務不可用(503)響應進行響應。
當我們流量請求到此接口執行業務邏輯的時候,若服務端此時執行關機 (kill),spring boot 默認情況會直接關閉容器(tomcat 等),導致此業務邏輯執行失敗。在一些業務場景下:會出現數據不一致的情況,事務邏輯不會回滾。使用Tomcat正常關機需要Tomcat 9.0.33或更高版本。
2.分成jar包
重新打包的jar 分別在BOOT-INF/classes和中包含應用程序的類和依賴項BOOT-INF/lib。對於需要從jar的內容中構建docker映像的情況,能夠進一步分隔這些目錄,以便可以將它們寫入不同的層是很有用的。
Buildpacks 打鏡像包會使用緩存的,如果這一層沒變那就不用重新打這一層,只需要重新打包修改過的層,這樣一來,如果你只修改了 application 中的內容,比如新加了 Controller 或者配置文件等,那么只需要重新打包這一層,也就是幾 K,幾十K 不會很大,這樣一來打包速度就很快了,要不然一個上百兆的鏡像包也得需要一段時間。
springboot2.4
1.自動分析瘦身
Spring Boot 項目最終構建處理 JAR 包大小一直是個詬病,需要把所有依賴包內置最終輸出可運行的 jar。 當然可以使用其他的插件擴展 實現依賴 JAR 和 可運行 jar 分離可以參考 slot-maven-plugin, 但此種方法治標不治本並不能減少原有依賴的 JAR 的大小。
Spring Boot 2.4 提供對構建輸出 JAR 分析自動瘦身的功能,自動在構建輸出可運行 JAR 時刪除 empty starter dependencies。
