InfoQ就Spring Boot 2.0 GA版釋出採訪了專案牽頭人Phil Webb

weixin_33766168發表於2018-03-12
\

看新聞很累?看技術新聞更累?試試下載InfoQ手機客戶端,每天上下班路上聽新聞,有趣還有料!

\
\\

廣受期待的Spring Boot 2.0近期由Spring的託管企業Pivotal釋出。這是Spring Boot自2014年6月推出以來的首次版本升級,也是自2017年2月釋出廣為使用的1.5版本後的首次釋出。

\\

Spring Boot面向技術“入門者”,對配置結構和自動配置給出了一些強烈推薦(opinionated)的條條框框,並基於注入(injection)預設設定為Spring提供了強大的生命週期。它有助於開發人員在保持重疊傳遞依賴一致性的同時,輕鬆地啟動包含多種技術選擇的新應用。

\\

Spring Boot Initializr自推出近四年來,已經生成了數百萬個專案。這使得Spring Boot成為一種在整個技術範圍內初始化JVM應用的標準。

\\

受支援的Spring Boot技術已分門別類為Core、Web、模板引擎、SQL、NoSQL、Messaging、一些基於雲的豐富類別、Pivotal Cloud Foundry、Azure、Social、IO和Ops等。這些類別涵蓋了當代應用中使用的大部分流行框架。

\\

針對新發布的Spring Boot,InfoQ採訪了專案牽頭人Phil Webb。

\\

InfoQ:開門見山。Spring Boot自推出以來,已成為Spring產品組合中最重要的平臺之一。Spring Boot 2.0將給出哪些特性?

\\
\

Webb: 的確如此。Spring Boot 2.0具有兩個主要目標。第一個目標是支援響應式程式設計(非阻塞應用。這類應用是非同步的、事件驅動的,並且擴充套件所需的執行緒數量少)。我們為所有支援響應式程式設計的Spring專案提供了自動配置。其中包括Spring Framework 5.0附帶的Spring WebFlux。現在也首次支援選擇Netty作為嵌入伺服器。

\\

第二個目標相對不是那麼引人關注。為確保能對未來的構建打下一個很好的基礎,我們正試圖完善我們在1.x系列中做出的一些決策。因此在這個版本中,我們做了很多的清理和重構工作。

\
\\

InfoQ: 有哪些特性是我們已在1.5版中習慣的,但是在未來版本中需要做出改變的?

\\
\

Webb: 對於大多數現有使用者來說,並沒有什麼重大變化。我們仍然提供對配置的約定,仍然根據類路徑的內容自動配置Spring,依然對開發人員自定義的Bean提供重試補償機制(backoff)。開發人員仍然可自行配置屬性檔案、yaml檔案或環境變數。

\\

人們可能會注意到,具有差異的特性主要是安全配置和OAuth。對於OAuth功能,現在已由一個專門的Spring Security專案處理。

\
\\

InfoQ:新版本是否向後相容?

\\
\

Webb: 版本升級後,對開發人員最明顯的影響在於屬性檔案。出於提高一致性的考慮,我們重新命名了不少屬性。如果開發人員正在遷移現有專案,並使用了良好支援Spring Boot的IDE,那麼在嘗試使用舊屬性名稱時會收到警告。我們提供了一個十分有用的遷移器jar包。它可以將舊名稱對映到新名稱,使得開發人員有機會逐步重新命名事物。

\\

此外,專案所需的更改量取決於該專案與Spring Boot的整合程度。例如,如果開發人員使用了標準的自動配置功能,並使用了一些屬性自定義事物,那麼確實不應該存在任何遷移上的痛苦。如果專案更為複雜,可能需要做一些程式碼遷移。對於使用者可接觸到的特性而言,最大改進是對嵌入Servlet容器、執行器端點(Actuator Endpoint)和一些度量的支援。特別是執行器端點,該特性在2.0中完全迥異。但如果開發人員需要花一些時間做遷移,那麼可以從Jersey和WebFlux獲得免費支援。在遷移指南中,詳細地介紹了該遷移器jar包的相關資訊。

\
\\

InfoQ: 舊的屬性是被棄用了,還是不再支援?

\\
\

Webb: 舊屬性名稱僅在使用遷移器專案時受支援。這為我們提供了一種兩全其美的做法,即我們可以在重新命名屬性的同時,保持自身程式碼庫的清潔。但人們依然需要一個遷移路徑。這意味著,一旦完成遷移並刪除了遷移者,開發人員就不再需要為檢查舊名稱付出效能上的損失。

\
\\

InfoQ:新版本是否需要Spring Framework 5.0支援?

\\
\

Webb: 是的。我們一直都需要最新的Spring Framework版本,Spring Boot 2.0也不例外。我們期待Spring Framework 5.0.3或更高版本。

\
\\

InfoQ:最低支援的Java版本是什麼?

\\
\

Webb: 當前,最低要求版本是Java 8。我們大量地使用了Java 8的特性和類。因此,Spring Boot 2.0無法在更早期的Java版本上執行。

\
\\

InfoQ:是否完全支援Java 9?

\\
\

Webb: Spring Boot 2.0完成支援Java 9。我們實現了持續整合,確保Spring Boot可使用Java 9構建並執行所有例子程式碼。在Wiki頁面https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9中提供了更多細節。

\
\\

InfoQ:是否完全支援HTTP/2?

\\
\

Webb: 開發人員可以通過Jetty、Undertow或Tomcat使用HTTP/2,細節參見參考文件。簡而言之,只要在屬性檔案中新增server.http2.enabled=true,並配置SSL即可。我們並不支h2c,即明文(cleartext)HTTP/2協議。

\
\\

InfoQ:這是否意味著你們將繼續支援一些廣為使用的應用伺服器,諸如Tomcat、Jetty和Thymeleaf?

\\
\

Webb: 我們繼續為嵌入的Tomcat 8.5、etty 9.4和Undertow 1.4提供支援。對於WebFlux應用,開發人員也可以使用嵌入的Netty 4.1。還可以將Spring Boot應用部署到應用伺服器,而且我們也會針對TomEE、Wildfly、WebSphere Liberty Profile和Glassfish測試每個構建。

\\

受支援的Thymeleaf最低版本是3.0。Thymeleaf將繼續提供出色的Spring支援,包括針對響應式應用的引擎節流(engine throttling)。

\
\\

InfoQ: Spring Boot新版本的釋出,是否會與Oracle新實施的每6個月推出一個新版本的策略保持同步?

\\
\

Webb: Spring Boot 2.0採用特性驅動版本。除非我們實現了完整的響應式特性,否則不能稱新版本為完成。展望未來,此後推出的幾個版本將更加迭代,並且更易於根據日期推出新版本。話雖然這麼說,但是Spring Boot的釋出並不會完全跟隨Oracle的釋出節奏。我們計劃與Spring Framework的進展亦步亦趨,將在其釋出之後數月內釋出。

\
\\

InfoQ:我們在多個新專案中都看見了Spring Boot的應用。Spring Boot的採納情況如何?

\\
\

Webb: 就我們所能夠追蹤的一些指標來看,我們對Spring Boot的採納率非常滿意。當然,作為一個開源專案,我們很難得到一個確切的數字。人們只要認為合適,就可以自由地使用該軟體,並沒有強制要求他們將使用資訊反饋給我們。

\\

我們曾使用共享Maven下載量為指標。最近我們更喜歡使用從Spring Initializr(start.spring.io)生成的專案數量。雖然當前採納的增長率隨時間的推移而自然趨於平緩,但就2017年而言,已經產生了470萬的Initalizr專案,這比2016年增長了256%。Maven的下載量的原始資料明顯更高,增長了300%。我很高興看到這兩個增長曲線間具有很好的相關性。

\\

但是我最喜歡的指標是對專案的反饋貢獻數。我很高興看到現在專案程式碼庫具有超過400位貢獻者。

\\

一些公開提供的資料看上去也十分不錯。Spring Boot就GitHub的Java專案的fork數而言排行第一(排名第二的是Spring框架),就GitHub的Java專案的星標數而言排行第七。

\
\\

InfoQ:終止支援版本1.x是否已經提上日程?

\\
\

Webb: 通常,Spring專案的主版本會提供三年的支援,小版本提供12個月的支援。鑑於Spring Boot 1.0是2014年釋出的,1.5版在2017年早期釋出,已經接近常規支援協議的上限了。我們完全理解人們需要一定升級的時間,這樣我們規劃至少對1.5版提供支援到明年。

\
\\

InfoQ: 能否給出一個以前版本並不提供的響應式支援的例子嗎?是否需要使用WebFlux和Reactor,才能從響應式中受益?還是具體實現自然會為使用者提供響應式的好處?如果是這樣,如何實現?

\\
\

Webb: 我認為Spring在反應式程式設計上具有相當獨特的地位。雖然我們可以一頭扎入其中,並完全採用響應式技術棧,但也可以從更小處著手。實際上,開發人員可以從基於Servlet的MVC應用返回響應式型別(Flux和Mono),這將會工作。雖然開發人員從中並不能獲得任何好處,但是他們不必完全轉向新的體系結構,就可以有機會嘗試響應式API。Spring Framework 5.0還引入了一個新的WebClient API。該API提供了一種非常自然的呼叫遠端Web服務的方式。該API大量地使用了Reactor型別,使開發人員可以用十分自然的方式編寫操作。

\\

還應該看到,除了傳統的同步阻塞模型之外,我們還提供了響應式程式設計選項。團隊正致力於為開發人員提供對兩種模式的選擇,並將繼續在這兩個方面上投入精力。

\
\\

InfoQ: 除了Java之外,Spring Boot還原生支援哪些JVM語言?

\\
\

Webb: 開發人員可以使用幾乎所有具有良好Java互操作性的JVM語言編寫Spring Boot應用。如果開發人員想使用除Java以外的其它一些開發方式,Groovy和Kotlin無疑也是很好的選擇。

\
\\

InfoQ:Python的使用日益廣泛。Spring團隊是否也對Python平臺做了一些工作?

\\
\

Webb: 我並不瞭解有Spring專案正在使用Python。Spring顯然是基於多年開發工作的支援,所以我們基於JVM語言是完全合情合理的。專案近期對另一種語言Kotlin做了一些投資。Spring框架和Spring Boot都具有Kotlin擴充套件,這些擴充套件提供了一流的開箱即可用的Kotlin體驗。

\
\\

InfoQ:您提及了在安全上的一些改進。Spring Boot是否會使用去年新推出的Spring Security 5.0?

\\
\

Webb: 是的。Spring Security 5.0是Spring Boot 2.0的最小需求。

\
\\

InfoQ: 您能介紹一下對於安全所做的一些特定改進嗎?

\\
\

Webb: 為支援響應式程式設計,Spring Security本身就給出了一整套新的API。如果開發人員熟悉現有的Spring Security概念,那麼相應的響應式概念也非常易於上手。

\\

在2.0版中,Spring Boot安全配置也得到了簡化。並且為了實現更簡化的模型,移除了1.5版支援的一些較為複雜的使用者化設定。在此部落格帖子中詳細解釋了上述改進的合理之處。

\
\\

InfoQ: 使用Micrometer度量是一個新的做法,還是內建的?是否對JMX可用?

\\
\

Webb: 在2.0版中,Micrometer.io取代了之前Spring Boot本身提供的度量API。我們自動為各種技術提供工具,例如Spring MVC、RestTemplate、DataSource Pools等。使用Micrometer可以實現類似於Boot 1.5的方式,通過JMX和HTTP公開各種度量。真正令人興奮之處在於,使用Micrometer還可以將度量提供到多種不同的後端。我們正在實現對匯出度量到Atlas、Datadog、Ganglia、Graphite、New Relic、Prometheus、SignalFX和StatsD的支援。

\
\\

被訪者簡介

\\

Phil Webb供職於Pivotal,他當前是Spring Boot專案的牽頭人。他來自於英國,但目前和他的家人一起生活在美國加州。

\\

檢視英文原文: Spring Boot 2.0 Goes GA; Project Lead Phil Webb Speaks to InfoQ About the New Release

相關文章