Spring Boot 2(一):Spring Boot 2.0新特性
Spring Boot依賴於Spring,而Spring Cloud又依賴於Spring Boot,因此Spring Boot2.0的發布正式整合了Spring5.0的很多特性,同樣后面Spring Cloud最新版本的發布也需要整合最新的Spring Boot2.0內容。
一、新版本特性
1,基於 Java 8,支持 Java 9
也就是說Spring Boot2.0的最低版本要求為JDK8,據了解國內大部分的互聯網公司系統都還跑在JDK1.6/7上,因此想要升級到Spring Boot2.0的同學們注意啦,同時支持了Java9,也僅僅是支持而已。
2,響應式編程
使用 Spring WebFlux/WebFlux.fn提供響應式 Web 編程支持, Webflux 是一個全新的非堵塞的函數式 Reactive Web 框架,可以用來構建異步的、非堵塞的、事件驅動的服務,在伸縮性方面表現非常好,此功能來源於Spring5.0。
Spring Boot2.0也提供對響應式編程的自動化配置,如:Reactive Spring Data、Reactive Spring Security 等
3,HTTP/2支持
在Tomcat, Undertow 和 Jetty 中均已支持 HTTP/2
4,對Kotlin支持
引入對 Kotlin 1.2.x 的支持,並提供了一個 runApplication 函數,讓你通過慣用的 Kotlin 來運行 Spring Boot 應用程序。
5,全新的執行器架構
全新的執行器架構,支持 Spring MVC, WebFlux 和 Jersey
6,支持 Quartz
Spring Boot1.0並沒有提供對 Quartz 的支持,之前出現了各種集成方案,Spring Boot2.0給出了最簡單的集成方式。
7,Security
大大的簡化了安全自動配置
8,Metrics
Metrics 方面,Spring Boot 2引入了Micrometer,來統一metrics的規范,使得開發人員更好的理解和使用metrics的模塊,而不需要關心對接的具體存儲是什么。
9,監控方面
Spring Boot 2 增強了對 Micrometer 的集成。RabbitMQ、JVM 線程和垃圾收集指標會自動進行 instrument 監控,異步控制器(controller)也會自動添加到監控里。通過集成,還可以對 InfluxDB 服務器進行監控。
10,數據方面
- db方面,默認引入了HikariCP,替代了之前的tomcat-pool作為底層的數據庫連接池, 對比於tomcat-pool, HikariCP擁有更好的性能,總而言之就是提高了db的訪問速度
- JOOQ的支持
- Redis方面, 默認引入了Lettuce, 替代了之前的jedis作為底層的redis鏈接方式
- MongoDB\Hibernate優化
11,Thymeleaf 3
Spring Boot 2支持了Thymeleaf 3,Thymeleaf 3相對於Thymeleaf 2性能提升可不是一點點,因為2.0的性能確實不咋地,同時也使用了新的頁面解析系統。
12,OAuth 2.0
同時也加入了 對於OAuth 2.0的支持, 使得開發人員更加友好的使用spring-security來完成權限模塊的開發
13,依賴組件的更新
- Jetty 9.4
- Tomcat 8.5
- Flyway 5
- Hibernate 5.2
- Gradle 3.4
- Thymeleaf 3.0
注意:最后還有一個小彩蛋,Spring Boot2.0支持了動態gif的啟動logo打印.
二、技術名詞解釋
Spring 現在作為Java開源界的老大,它的一舉一動都影響着行業的技術方向,在這次發布的 Release Notes中發現有很多的技術都還沒有了解過,也分享出來:
1,WebFlux 是什么?
WebFlux 模塊的名稱是 spring-webflux,名稱中的 Flux 來源於 Reactor 中的類 Flux。Spring webflux 有一個全新的非堵塞的函數式 Reactive Web 框架,可以用來構建異步的、非堵塞的、事件驅動的服務,在伸縮性方面表現非常好。
非阻塞的關鍵預期好處是能夠以小的固定數量的線程和較少的內存進行擴展。在服務器端 WebFlux 支持2種不同的編程模型:
- 基於注解的 @Controller 和其他注解也支持 Spring MVC
- Functional 、Java 8 lambda 風格的路由和處理
默認情況下,Spring Boot 2使用Netty WebFlux,因為Netty在異步非阻塞空間中被廣泛使用,異步非阻塞連接可以節省更多的資源,提供更高的響應度。通過比較Servlet 3.1非阻塞I / O沒有太多的使用,因為使用它的成本比較高,Spring WebFlux打開了一條實用的通路。
值得注意的是:支持reactive編程的數據庫只有MongoDB, redis, Cassandra, Couchbase
2,HTTP/2
相比 HTTP/1.x,HTTP/2 在底層傳輸做了很大的改動和優化:
- HTTP/2 采用二進制格式傳輸數據,而非 HTTP/1.x 的文本格式。二進制格式在協議的解析和優化擴展上帶來更多的優勢和可能。
- HTTP/2 對消息頭采用 HPACK 進行壓縮傳輸,能夠節省消息頭占用的網絡的流量。而 HTTP/1.x 每次請求,都會攜帶大量冗余頭信息,浪費了很多帶寬資源。頭壓縮能夠很好的解決該問題。
- 多路復用,直白的說就是所有的請求都是通過一個 TCP 連接並發完成。HTTP/1.x 雖然通過 pipeline 也能並發請求,但是多個請求之間的響應會被阻塞的,所以 pipeline 至今也沒有被普及應用,而 HTTP/2 做到了真正的並發請求。同時,流還支持優先級和流量控制。
- Server Push:服務端能夠更快的把資源推送給客戶端。例如服務端可以主動把 JS 和 CSS 文件推送給客戶端,而不需要客戶端解析 HTML 再發送這些請求。當客戶端需要的時候,它已經在客戶端了。
3,JOOQ
JOOQ 是基於Java訪問關系型數據庫的工具包。JOOQ 既吸取了傳統ORM操作數據的簡單性和安全性,又保留了原生sql的靈活性,它更像是介於 ORMS和JDBC的中間層。對於喜歡寫sql的碼農來說,JOOQ可以完全滿足你控制欲,可以是用Java代碼寫出sql的感覺來。
4,Lettuce
Lettuce是一個可伸縮的線程安全的Redis客戶端,用於同步,異步和反應使用。 多個線程可以共享同一個RedisConnection。它利用優秀netty NIO框架來高效地管理多個連接。 支持先進的Redis功能,如Sentinel,集群,流水線,自動重新連接和Redis數據模型。
國內使用Jedis的居多,看來以后要多研究研究Lettuce了。
5,HikariCP
HikariCP是一個高性能的JDBC連接池。Hikari是日語“光”的意思。可能是目前java業界最快的數據庫連接池。
6,Flyway
Flyway是獨立於數據庫的應用、管理並跟蹤數據庫變更的數據庫版本管理工具。用通俗的話講,Flyway可以像SVN管理不同人的代碼那樣,管理不同人的sql腳本,從而做到數據庫同步。
7,Gson
Gson 是google解析Json的一個開源框架,同類的框架fastJson,JackJson等等
三、是否選擇升級
如果想要升級也請先從早期的版本升級到Spring Boot1.5X系列之后,再升級到Spring Boot2.0版本,Spring Boot2.0的很多配置內容和Spring Boot1.0不一致需要注意。