千呼萬喚始出來,猶抱琵琶半遮面。經過17個月的等待之後,在北京時間2018年3月1日,Spring Boot2.0正式發佈。作為Spring生態中重要的開源項目,Spring Boot大大簡化了Spring應用的初始創建以及開發過程。用戶只需要“run”就能創建一個獨立的,產品級別的應用,從而讓用戶真正的Focus在自己的業務,而不是被淹沒在無休無盡的Spring MVC+Spring+Hibernate的jar包兼容性泥潭裡面。從發佈第一個正式版本到2.0X,共經歷了4年了時間,Spring Boot已經是一個擁有21000多Stars, 15000多次commits,貢獻者超過400多名的超熱門開源項目。 那這次Spring Boot2.0的發佈,有哪些值得我們關注的亮點呢?
基於Java8, 支持Java9
Spring Boot2.0要求Java最低版本為Java8,同時也支持Java9。這就意味不可以使用Java7或者更低的版本運行Spring Boot2.0
支持響應式編程
·使用Spring WebFlux/WebFlux.fn提供響應式的Web編程支持。
·為各種組件的響應式編程提供了自動化配置,如:Reactive, Spring Data, Reactive Spring security等。
HTTP/2支持
為Tomcat, Undertow和Jetty提供了HTTP/2的支持。
對Kotlin支持
引入對Kotlin1.2.X的支持,並提供了一個runApplication函數,通過使用Kotlin來運行Spring Boot應用程序。
支持 Quartz
Spring Boot2.0開始提供對 Quartz 的支持,只需加入spring-boot-starter-quartz starter就可以啟用。而且支持基於內存和基於Jdbc兩種存儲。
JSON-B 支持
除了Jackson 和 Gson,現在還支持了JSON-B(包括JSON-B測試)。
Spring Security
大大的簡化了安全自動配置。同時也加入了對於OAuth 2.0的支持, 使得開發人員能夠更加友好的使用spring-security。
Gradle 插件
Spring Boot對Gradle插件進行了重寫,做了重大的改變。
全新的執行器架構
在基於Spring Boot的應用程序內通過Endpoint可以根據應用程序業務需求實現自定義的監控接口,Spring 2.0 對於執行器端點(Actuator Endpoint)有很多改進和優化,經過重新設計後的Spring Boot 2 在Endpoint方面帶來了全新的架構。全新的執行器架構,支持 Spring MVC, WebFlux 和 Jersey。
Thymeleaf 3
Spring Boot 2支持了Thymeleaf 3,其中有哪些值得我們關注的新特性呢?
·由於使用新的解析系統,Thymeleaf不再基於XML。
·引入新的文本模式,它給Thymeleaf提供了輸出CSS, JavaScript和純文本的功能。
·重寫了引擎,性能顯著提高。
配置屬性的綁定
T在Spring Boot 2.0中,用於將環境(Environment)屬性綁定到@ConfigurationProperties的機制已經徹底改進。 我們藉此機會收緊了鬆散綁定的規則,並修復了Spring Boot 1.x中的許多不一致之處。
新的Binder API也可以在你自己的代碼中直接在@ConfigurationProperties之外使用。 例如,以下將綁定到PersonName對象列表:
Listpeople = Binder.get(environment).bind("my.property", Bindable.listOf(PersonName.class)).orElseThrow(IllegalStateException::new);
配置源可以像這樣在YAML中表示:
my:property:- first-name: Janelast-name: Doe- first-name: Johnlast-name: Doe
數據的支持
·SpringBoot2.0中默認的數據池已經從Tomcat pool更換為HikariCP。HikariCP為我們提供了更好性能,提高了訪問DB的速度。
·對JOOQ的支持。
·現在可以使用spring.cache.redis.*屬性配置 Redis 的緩存默認值。
·優化MongoDB\Hibernate。
轉換器支持
綁定使用了一個新的ApplicationConversionService類,它提供了一些對屬性綁定特別有用的額外轉換器。 最值得注意的是持續時間類型和分隔字符串的轉換器。
持續時間轉換器允許以ISO-8601格式或簡單字符串(例如10m表示10分鐘)指定持續時間。 現有的屬性已更改為始終使用持續時間。 @DurationUnit註釋通過設置未指定的單位來確保後向兼容性。 例如,Spring Boot 1.5中預期秒數的屬性現在具有@DurationUnit(ChronoUnit.SECONDS),以確保簡單的值(如10)實際上使用10秒。
分隔字符串轉換允許您將簡單字符串綁定到集合或數組,而不必使用逗號分隔。 例如,LDAP base-dn屬性使用@Delimiter(Delimiter.NONE),以便LDAP DN(通常包含逗號)不會被誤解。
第三方庫的升級
·Jetty 9.4
·Tomcat 8.5
·Flyway 5
·Hibernate 5.2對
·Gradle 3.4
·Thymeleaf 3.0
動畫 ASCII 藝術
最後,僅僅是為了好玩,Spring Boot 2.0 開始支持動畫 GIF 。下面是一個用SpringBoot 2.0 生成的動畫。
SpringBoot2.0 中出現的新面孔
通過學習以上內容,在Spring Boot2.0中的我們發現了許多的新的名詞,接下來我們就一起了解一下:
1. WebFlux?
WebFlux 模塊的名稱是 spring-webflux。Spring webflux 是一個全新的非堵塞的函數式 Reactive Web 框架,可以用來構建異步的、非堵塞的、事件驅動的服務,在伸縮性方面表現非常好。在服務器端 WebFlux 支持2種不同的編程模型:
·基於 Spring MVC 註解 @Controller 等
·基於Functional 函數式路由
2. HikariCP
HikariCP是一個高性能的JDBC連接池。Hikari是日語“光”的意思。可能是目前java業界最快的數據庫連接池。
3. JOOQ
JOOQ 是基於Java訪問關係型數據庫的工具包。JOOQ 保留了傳統ORM操作數據的簡單性和安全性,又有原生sql的靈活性。
是否選擇升級?
Spring Boot2.0相對於1.0的版本的增加了許多新的特性,最重要的是Spring Boot不再支持JDK7及以下版本,目前國內大多數公司仍舊使用的是JDK7和JDK6,甚至是更低的版本。另外一個新的大版本發佈之後難免會有Bug, 等待使用一段時間之後才會慢慢穩定下來。因此我的建議是,如果不是特別著急使用Spring Boot2.0的新特性就儘量不要進行升級,等到Spring Boot2.0徹底穩定下來再使用。
學習書籍推薦
目前學習SpringBoot的經典書籍還是由參與Spring和SpringBoot的開發者克雷格·沃斯(Craig Walls)編著的《SpringBoot實戰》,這本書不厚,但絕對是快速入門SpringBoot的經典書籍,京東上就有賣,點擊下圖就可以直接進入京東商城購買。
但是如果是初學者建議先看一下Spring的基礎知識,可以先看《Spring實戰(第4版)》,也是由雷格·沃斯(Craig Walls)編著。
總結
閱讀更多 軟件先生 的文章