1. 程式人生 > >Spring Boot 2.0(一):【重磅】Spring Boot 2.0權威釋出

Spring Boot 2.0(一):【重磅】Spring Boot 2.0權威釋出

就在昨天Spring Boot2.0.0.RELEASE正式釋出,今天早上在釋出Spring Boot2.0的時候還出現一個小插曲,將Spring Boot2.0同步到Maven倉庫的時候出現了錯誤,然後Spring Boot官方又趕緊把 GitHub 上釋出的 v2.0.0.RELEASE 版本進行了撤回。到了下午將問題修復後,又重新進行了上傳,至此Spring Boot2.0正式推出!

要知道這是Spring Boot1.0釋出4年之後第一次重大修訂,因此有多的新功能和特性值得大家期待!在Spring Boot官方部落格中我們瞭解到:Spring Boot2.0版本經歷了 17 個月的開發,有 215 個不同的使用者提供了超過 6800 次的提交,並表示非常感謝提供貢獻的每一位使用者,和所有對這些里程碑版本提供重要反饋的早期採用者。

熟悉Spring Boot/Cloud的技術者們都知道,Spring Boot依賴於Spring,而Spring Cloud又依賴於Spring Boot,因此Spring Boot2.0的釋出正式整合了Spring5.0的很多特性,同樣後面Spring Cloud最新版本的釋出也需要整合最新的Spring Boot2.0內容。

新版本特性

新版本值得關注的亮點有哪些:

基於 Java 8,支援 Java 9

也就是說Spring Boot2.0的最低版本要求為JDK8,據瞭解國內大部分的網際網路公司系統都還跑在JDK1.6/7上,因此想要升級到Spring Boot2.0的同學們注意啦,同時支援了Java9,也僅僅是支援而已。

響應式程式設計

使用 Spring WebFlux/WebFlux.fn提供響應式 Web 程式設計支援, Webflux 是一個全新的非堵塞的函式式 Reactive Web 框架,可以用來構建非同步的、非堵塞的、事件驅動的服務,在伸縮性方面表現非常好,此功能來源於Spring5.0。

Spring Boot2.0也提供對響應式程式設計的自動化配置,如:Reactive Spring Data、Reactive Spring Security 等

HTTP/2支援

在Tomcat, Undertow 和 Jetty 中均已支援 HTTP/2

對Kotlin支援

引入對 Kotlin 1.2.x 的支援,並提供了一個 runApplication 函式,讓你通過慣用的 Kotlin 來執行 Spring Boot 應用程式。

全新的執行器架構

全新的執行器架構,支援 Spring MVC, WebFlux 和 Jersey

支援 Quartz

Spring Boot1.0並沒有提供對 Quartz 的支援,之前出現了各種整合方案,Spring Boot2.0給出了最簡單的整合方式。

Security

大大的簡化了安全自動配置

Metrics

Metrics方面,Spring Boot 2引入了Micrometer,來統一metrics的規範,使得開發人員更好的理解和使用metrics的模組,而不需要關心對接的具體儲存是什麼。

監控方面

Spring Boot 2 增強了對 Micrometer 的整合。RabbitMQ、JVM 執行緒和垃圾收集指標會自動進行 instrument 監控,非同步控制器(controller)也會自動新增到監控裡。通過整合,還可以對 InfluxDB 伺服器進行監控。

資料方面

  • db方面,預設引入了HikariCP,替代了之前的tomcat-pool作為底層的資料庫連線池, 對比於tomcat-pool, HikariCP擁有更好的效能,總而言之就是提高了db的訪問速度
  • JOOQ的支援
  • Redis方面, 預設引入了Lettuce, 替代了之前的jedis作為底層的redis連結方式
  • MongoDB\Hibernate優化

Thymeleaf 3

Spring Boot 2支援了Thymeleaf 3,Thymeleaf 3相對於Thymeleaf 2效能提升可不是一點點,因為2.0的效能確實不咋地,同時也使用了新的頁面解析系統。

OAuth 2.0

同時也加入了 對於OAuth 2.0的支援, 使得開發人員更加友好的使用spring-security來完成許可權模組的開發

依賴元件的更新

  • 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中發現有很多的技術都還沒有了解過,也分享出來:

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

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 再發送這些請求。當客戶端需要的時候,它已經在客戶端了。

JOOQ

JOOQ 是基於Java訪問關係型資料庫的工具包。JOOQ 既吸取了傳統ORM操作資料的簡單性和安全性,又保留了原生sql的靈活性,它更像是介於 ORMS和JDBC的中間層。對於喜歡寫sql的碼農來說,JOOQ可以完全滿足你控制慾,可以是用Java程式碼寫出sql的感覺來。

Lettuce

Lettuce是一個可伸縮的執行緒安全的Redis客戶端,用於同步,非同步和反應使用。 多個執行緒可以共享同一個RedisConnection。它利用優秀netty NIO框架來高效地管理多個連線。 支援先進的Redis功能,如Sentinel,叢集,流水線,自動重新連線和Redis資料模型。

國內使用Jedis的居多,看來以後要多研究研究Lettuce了。

HikariCP

HikariCP是一個高效能的JDBC連線池。Hikari是日語“光”的意思。可能是目前java業界最快的資料庫連線池。

Flyway

Flyway是獨立於資料庫的應用、管理並跟蹤資料庫變更的資料庫版本管理工具。用通俗的話講,Flyway可以像SVN管理不同人的程式碼那樣,管理不同人的sql指令碼,從而做到資料庫同步。

Gson

Gson 是google解析Json的一個開源框架,同類的框架fastJson,JackJson等等

看完 Spring Boot 2.0 Release Notes ,發現又有很多不知道的新技術了,以後有的學了

是否選擇升級

通過以上內容可以看出Spring Boot2.0相對於1.0增加了很多新特性,並且最重要的是Spring Boot2.0依賴的JDK最低版本是1.8,估計國內大多網際網路公司還麼這麼激進。另外一個新的重大版本更新之後,難免會有一些小Bug什麼的,往往需要再發布幾個小版本之後,才會慢慢穩定下來。

因此我的建議是,如果不是特別想使用Spring Boot2.0上面提到的新特性,就儘量不要著急進行升級,等Spring Boot2.0徹底穩定下來後再使用。如果想要升級也請先從早期的版本升級到Spring Boot1.5X系列之後,再升級到Spring Boot2.0版本,Spring Boot2.0的很多配置內容和Spring Boot1.0不一致需要注意。

Spring Boot1.0釋出之後給我們帶來了全新的開發模式,Spring Boot2.0釋出標誌著Spring Boot已經走向成熟,對Java界帶來的變革已經開啟!

寫在最後

前兩天在看池建強老師文章時,發現老師剛好也介紹了Spring Boot2.0,其中有這麼一個觀點:Java 語言為什麼能夠長期佔據程式設計兵器排行榜第一名的位置呢?因為命好。

Java 能長盛不衰,主要是命好。每當人們覺得 Java 不行了的時候,總會有英雄橫刀救美。

最初 Java 開發出來不知道有什麼用的時候,發現可以用 Applet 在網頁上做動畫。後來企業級軟體開發時代 JavaEE 大行其道,開源社群 Spring 桃李滿天下。等到了移動時代,人們覺得 Java 要完蛋了,Google 拍馬救市,收購併開放了 Android 平臺,當家語言就是 Java,於是 Java 再次煥發勃勃生機。目前大資料領域,Java 同樣是當仁不讓的好手。

現在 Spring Framework 那套東西使用了十幾年,正當大家被長達幾千行的 ApplicationContext 配置檔案折磨的死去活來的時候,Spring Boot 誕生了。什麼是 Spring Boot?用來簡化 Spring 應用程式開發的。

換句話說就是,當你覺得 Java 不好用的時候,我做了個輕量級的 S,讓你好好用 Java。等你覺的 S 也不夠輕了,我做了個 SB,讓你覺得 S 還是挺輕的。

從2002年Rod Johnson的interface21到如今的Spring Boot2.0,Spring 走過了16年的春秋,經歷了N多的貢獻者,Spring 也從一個小小的開源框架,發展成Java領域最成功的開源軟體沒有之一!同時做為一名Java開發從業者,也特別的感謝Spring這類的開源組織,為推動企業級開發做了巨大的貢獻,全世界的Java開發者都是它的受益者!

參考