正火的SpringBoot2.0更新了啥?

java填坑路發表於2018-10-11

作為知名網際網路公司都在用的技術,Spring Boot 2.0 的更新引起了很大的關注,本文將分為三部分解讀 2.0 的更新:

  • 第一類,基礎環境升級;
  • 第二類,預設軟體替換和優化;
  • 第三類,新技術的引入。

 

001

基礎環境升級

 

Spring Boot 2.0 要求 Java 8 作為最低版本,許多現有的 API 已更新,以利用 Java 8 的特性。如果你正在使用 Java 7 或更早版本,則在開發 Spring Boot 2.0 應用程式之前,需要升級你的 JDK。

依賴元件升級:

Spring Boot 2.0 基於 Spring Framework 5 構建,Spring Boot 升級依賴的第三方元件,主要有以下幾個:

  • Jetty 9.4,Jetty 是一個開源的 Servlet 容器,它為基於 Java 的 Web 內容,例如 JSP 和 Servlet 提供執行環境。Jetty 是使用 Java 語言編寫的,它的 API 以一組 JAR 包的形式釋出。
  • Tomcat 8.5,Apache Tomcat 8.5.x 旨在取代 8.0.x,完全支援 Java 9。
  • Flyway 5,Flyway 是獨立於資料庫的應用、管理並跟蹤資料庫變更的資料庫版本管理工具。用通俗的話講,Flyway 可以像 SVN 管理不同人的程式碼那樣,管理不同人的 SQL 指令碼,從而做到資料庫同步。
  • Hibernate 5.2,Hibernate 是一款非常流行的 ORM 框架。
  • Gradle 3.4,Spring Boot 的 Gradle 外掛在很大程度上已被重寫,有了重大的改進。
  • Thymeleaf 3.0,Thymeleaf 3 相對於 Thymeleaf 2 有非常大的效能提升。

 

002

預設軟體替換和優化

 

HikariCP:

預設連線池已從 Tomcat 切換到 HikariCP,HikariCP 是一個高效能的 JDBC 連線池,Hikari 是日語“光”的意思。

HikariCP 號稱是 Java 業界最快的資料庫連線池,官網提供了 c3p0、dbcp2、tomcat、vibur 和 Hikari 等資料連線池的效能對比。

正火的 Spring Boot 2.0 更新了啥?

 

 

Security:

Spring Security 是 Spring 社群的一個頂級專案,也是 Spring Boot 官方推薦使用的 Security 框架。除了常規的 Authentication 和 Authorization 之外,Spring Security 還提供了諸如 ACLs、LDAP、JAAS、CAS 等高階特性以滿足複雜場景下的安全需求。

沒有使用 Spring Boot 之前整合起來相對比較麻煩,而 Spring Boot 中基於 Java 配置實現 Spring Security 功能。Spring Boot 2.0 極大地簡化了預設的安全配置,並使新增定製安全變得簡單。

Spring Boot 2.0 非常容易使用 Spring Security 5.0 保護響應式應用,當檢測到 Spring Security 存在的時候會自動進行預設配置。

OAuth 2.0:

OAuth 2.0 關注客戶端開發者的簡易性。要麼通過組織在資源擁有者和 HTTP 服務商之間的被批准的互動動作代表使用者,要麼允許第三方應用代表使用者獲得訪問的許可權。

OAuth 2.0 是一個授權框架,或稱授權標準,它可以使第三方應用程式或客戶端獲得對 HTTP 服務上(如 Google、GitHub )使用者帳戶資訊的有限訪問許可權。OAuth 2.0 通過將使用者身份驗證委派給託管使用者帳戶的服務以及授權客戶端訪問使用者帳戶進行工作。

Spring Boot 2.0 將 Spring Security OAuth 專案遷移到 Spring Security。不再提供單獨的依賴包,Spring Boot 2.0 通過 Spring Security 5 提供 OAuth 2.0 客戶端支援。

Micrometer:

Micrometer 是一款監控指標的度量類庫,可以讓你在沒有供應商鎖定的情況下對 JVM 的應用程式程式碼進行調整。Spring Boot 2.0 增強了對 Micrometer 的整合,不再提供自己的指標 API。依靠 micrometer.io 來滿足所有應用程式監視需求。

Micrometer 包括尺寸指標的支援,當與尺寸監測系統配對時,尺寸指標可以有效訪問特定的指定度量標準,並且可以在其尺寸範圍內向下鑽取。

指標可以輸出到各種系統和開箱即用的 Spring Boot 2.0,為 Atlas、Datadog、Ganglia、Graphite、Influx、JMX、New Relic、Prometheus、SignalFx、StatsD 和 Wavefront 提供支援,另外還可以使用簡單的記憶體中度量標準。

整合後提供 JVM 指標(包括 CPU、記憶體、執行緒和 GC)、Logback、Tomcat、Spring MVC & 提供 RestTemplate。

Redis 方面預設引入了 Lettuce,替代了之前的 Jedis 作為底層的 Redis 連線方式

Lettuce 是一個可伸縮的執行緒安全的 Redis 客戶端,用於同步、非同步和反應使用。支援先進的 Redis 功能,如 Sentinel、叢集、流水線、自動重新連線和 Redis 資料模型。

配置屬性繫結:

在 Spring Boot 2.0 中,使用 Environment 繫結機制的 @ConfigurationProperties 數學已經完全徹底修改。藉此機會收緊了繫結的規則,並修復了 Spring Boot 1.x 中的許多不一致之處。

新的 Binder API 也可以直接使用 @ConfigurationProperties 在程式碼中。例如,下面繫結 List 中的 PersonName 物件:

List<PersonName> people = Binder.get(environment)
 .bind("my.property", Bindable.listOf(PersonName.class))
 .orElseThrow(IllegalStateException::new);

配置源可以像這樣在 YAML 中表示:

my:
 property:
 - first-name: Jane last-name: Doe
 - first-name: John last-name: Doe

Actuator 改進:

在 Spring Boot 2.0 中 Actuator endpoints 有很大的改進,所有 HTTP Actuator endpoints 現在都在該/actuator路徑下公開,並且生成的 JSON 有效負載得到了改進。

現在預設情況下不會暴露很多端點。如果你要從 Spring Boot 1.5 升級現有的應用,請務必檢視遷移指南並特別注意該 management.endpoints.web.exposure.include 屬性。Spring Boot 2.0 改進了從許多端點返回的 JSON 有效負載。

 

現在許多端點都具有更精確地反映底層資料的 JSON。例如,/actuator/conditions終端(/autoconfig在 Spring Boot 1.5 中)現在有一個頂級 contexts 金鑰來將結果分組 ApplicationContext。

003

新技術的引入

 

支援 HTTP/2:

HTTP/2 是第二代的 HTTP 協議,Spring Boot 的 Web 容器選擇中 Tomcat,Undertow 和 Jetty 均已支援 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 再傳送這些請求,當客戶端需要的時候,它已經在客戶端了。

 

嵌入式 Netty 伺服器:

由於 WebFlux 不依賴於 Servlet API,我們現在可以首次為 Netty 作為嵌入式伺服器提供支援,該 spring-boot-starter-webflux 啟動 POM 將拉取 Netty 4.1 和 Ractor Netty。

注意:你只能將 Netty 用作反應式伺服器,不提供阻止 Servlet API 支援。

Kotlin的支援:

Spring Boot 2.0 現在包含對 Kotlin 1.2.x 的支援,並提供了 runApplication,一個使用 Kotlin 執行 Spring Boot 應用程式的方法。我們還公開和利用了 Kotlin 對其他 Spring 專案(如 Spring Framework,Spring Data 和 Reactor)已新增到其最近版本中的支援。

響應式程式設計:

WebFlux 模組的名稱是 spring-webflux,名稱中的 Flux 來源於 Reactor 中的類 Flux。Spring WebFlux 有一個全新的非堵塞的函式式 Reactive Web 框架,可以用來構建非同步的、非堵塞的、事件驅動的服務,在伸縮性方面表現非常好。

非阻塞的關鍵預期好處是能夠以小的固定數量的執行緒和較少的記憶體進行擴充套件。在伺服器端 WebFlux 支援兩種不同的程式設計模型:

  • 基於註解的 @Controller 和其他註解也支援 Spring MVC;
  • Functional 、Java 8 Lambda 風格的路由和處理。

 

 

預設情況下,Spring Boot 2.0 使用 Netty WebFlux,因為 Netty 在非同步非阻塞空間中被廣泛使用,非同步非阻塞連線可以節省更多的資源,提供更高的響應度。

Spring Boot 2.0 也提供了對響應式程式設計的自動化配置,如 Reactive Spring Data、Reactive Spring Security 等。

歡迎工作一到五年的Java工程師朋友們加入Java填坑之路:860113481
群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用”沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!
 


相關文章