Spring Boot 1.3發布,包含DevTools和ASCII Art特性

jopen 9年前發布 | 31K 次閱讀 Spring Boot
 

Spring的管理者Pivotal公司 發布了Spring Boot 1.3 ,它為Java類/Spring配置新增了熱重載功能(使用了一個新的 spring-boot-devtools 模塊)、緩存自動配置(支持EhCache、Hazelcast、Infinispan、JCache、Redis和Guava),并且還能為Linux/Unix提供完全可執行的歸檔文件。這個版本的 發布說明 詳細描述了這些變化。

一個非常有意思的特性就是在banner.txt中可以包含彩色的ANSI編碼。這樣當應用啟動的時候,就能在你的控制臺上展現藝術化的信息了。例如:

或者參見最新釋放的JHipster:

如果你希望通過這個特性發揮一下創造性的話,Craig Burke為Spring Boot創建了一個 圖片到ascii-art的轉換器

InfoQ邀請到了Spring Boot團隊中的主要貢獻者Dr. Dave Syer、Phillip Webb、Stéphane Nicoll、Andy Wilkinson和Josh Long,針對這個發布版本,舉行了一個Q&A交流。

InfoQ:看起來,Spring Boot是一個很流行的項目。對于Java社區對它的反應,你們應該感到很開心吧?

Spring Boot團隊: 非常開心!我們認為有兩個原因推動了Spring Boot的流行。第一個原因是Java 8在一定程度上觸發了Java的重新崛起。與Java 7相比,使用Java 8編碼要有趣得多!第二個原因在于Spring Boot構建在一個巨大的基礎之上。Spring生態系統很大,許多人可能沒有太多的時間了解每個不同的項目。通過快速上手和簡單嘗試,我們能夠讓您著重體驗到那些原本會忽略掉的特性。關于這一點,我們有一個很好的例子,就是Spring Data + Hibernate + 內存DB。通過移除所有顯式的配置,能夠非常容易地展現Spring Data Repository的真正威力。您能夠實現動態語言級別的生產率,同時還能具備JVM的類型安全、并發、穩定性以及性能。

InfoQ:在Spring Boot 1.3中,你最喜歡的特性是什么?

Spring Boot團隊: 在內部,我們曾經開玩笑說,我們花了八個月的時間開發devtools、緩存、metrics以及更加自動化的配置等特性,但是人們最喜歡的是——彩色的 banner!可能最獨特的特性,也是在其他地方我們所沒有見過的就是完全可執行的JAR。通過簡單地輸入“ln -s”就能創建unix服務也是非常棒的。

InfoQ:這次看起來是一個很大的發布版本,為什么不將其稱為2.0呢?

Spring Boot團隊: Spring Framework在版本號方面上是非常保守的,在十多年的發展后,它的版本號才是4。我們想延續這一傳統,同時也想說明,對于大多數人來說,這次的升級不會帶來很多的痛苦。當Spring 5.0出來之后,我們將會發布2.0版本,同時,它的最低需求是Java 8.

InfoQ:你們有沒有計劃減少Spring Boot應用所占用的內存?

Spring Boot團隊: 針對Spring應用所報告的內存,有時候會有一定的誤導性。我們過去曾經見過誤報的報告,實際上是內部緩存在消耗內存,并且它們還沒有被GC。例如在 Spring Boot倉庫中的Freemarker樣例應用,在Java 8下使用-Xmx32MB配置就能運行得很好(當然,它確實還使用了一些非堆內存)。在Spring Framework中,對緩存邏輯的優化最近確實也在進行,并且還有計劃對其進行重新考慮。讀者所共享的所有消耗大量內存的樣例應用都會為我們提供幫助。

InfoQ:在云環境中(如AWS、Cloud Foundry、Heroku),組織(部署、監控、替換)Spring Boot微服務流程的最佳方式是什么?

Spring Boot團隊:Spring Boot在各個地方都運行得非常好,包括Heroku、OpenShift、Google Cloud、Oracle Cloud、Azure等等,關于如何在這些平臺上運行Spring Boot(以及通常常見的Spring Cloud)應用都有公開的博客文章和訪談。在Spring Boot的參考手冊中,我們甚至編寫了針對幾個大型云平臺的操作步驟。如果你試圖組織自己的流程和平臺(最好不要這樣做),那么你會發現我們已經在 http://spring.io/guides 上提供了將Docker和Spring Boot集成在一起的指南。

對于大多數人來說,我們強烈認為Cloud Foundry是具有極大優勢的,只需簡單地執行cf push -p foo.jar foo,你的工作就完事了。Spring Cloud團隊已經將Netflix OSS和Pivotal Cloud Foundry集成在了一起,這也是非常棒的。

InfoQ:你們覺得Java 9或Java 8中有什么特性能夠幫助到Spring Boot嗎?

Spring Boot團隊:按照JDK 9的最終形態,它可能會成為模塊化Spring應用的基礎。Spring Framework 5將會盡其所能允許應用基于JDK 9開發……而Spring Boot 2也會如此,尤其是統一基于模塊路徑(modulepath)啟動JVM,完全避免以前的classpath。

對Java EE 8來說,我們看到HTTP/2引起了大家廣泛的興趣。在Spring Boot中,雖然現在已經可以使用HTTP/2了(Jetty和Undertow已經對其提供了支持),但是Servlet 4.0對它的官方支持依然值得期待。其他的Java EE 8規范也會根據需求提供支持。我們認為對JMS 2.1會有很強烈的需求。Spring Boot已經提供了對JCache 1.0的支持,Spring Framework也已經支持Hibernate 5.0了。我們還需要對Spring Boot做些工作,才能使其完全支持Hibernate 5.0,這有望在1.4版本中實現。

InfoQ:你們能給剛剛接觸Spring Boot的初學者推薦一些視頻嗎?

Spring Boot團隊: Brian Clozel和Stéphane Nicoll最近做了一個 Devoxx訪談 現在已經上線了。這個訪談比大多數的會議錄像要長得多,因此能夠涉及更多的細節。在2014年,Phil Webb曾經對Josh Long做個一個很有意思的訪談,它能夠幫助你 大致掌握Spring Boot的特性 ,Josh還曾經做過一個 很棒的個人演講 ,它位于vimeo網站上,更加關注的是微服務的主題。

InfoQ:對于Spring Boot的高級用戶,你們有什么要推薦的視頻嗎?

Spring Boot團隊: Nicholas Frankel的 Spring Boot for DevOps 上有很多有用的信息,涵蓋了高級用戶可能會感興趣的一些擴展點。除此之外,我推薦看一些關于Spring Cloud的討論。Dave Syer和Josh Long有一個 很棒的入門訪談 ,你還應該看一下Jon Schneider和Taylor Wicksell 對Spring Cloud和Netflix的討論 (這是在今年的SpringOne2GX會議上得票最多的討論之一)。

InfoQ:在start.spring.io上,是否收集到了用戶選擇哪個starter的統計數據呢?如果收集到的話,你們有什么可以分享的嗎?

Spring Boot團隊: 是的,我們收集到了統計數據,并且 在最近的一篇博客文章中 進行了描述。基于Maven并且使用jar作為打包方式的Java 8工程占據了主導地位。 start.spring.io 每個月平均會生成50,000個項目,我們計劃推出更多的定期統計數據。

InfoQ:在Spring Boot 1.3中,彩色的banner.txt是一個很有意思并且很好玩的特性。那么你們有沒有計劃彩色打印日志,不同的日志級別顯示為不同的顏色?

Spring Boot團隊:在1.3版本中已經支持根據日志級別改變顏色。在默認控制臺日志配置中,我們為不同的級別設置了顏色:INFO是綠色的,WARN是黃色的,而ERROR是紅色的。如果使用%clr轉換詞的話,我們可以改變整行的顏色。大致如下所示:

%clr(%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx})

我們默認沒有啟用它的原因在于,在一些終端主題中,這會使得日志很難閱讀。

InfoQ還與Julien Dubois進行了交流,他是 JHipster 的創立者,JHipster會使用AngularJS和Spring Boot來創建項目。Dubois是Spring Boot的長期用戶,作為高級用戶,我們希望他會有一些獨特的視角。

InfoQ:您是什么時候開始使用Spring Boot的呢?

Julien Dubois:JHipster啟動的時間要比Spring Boot早幾個月,我們有一些最初的目標非常類似于當前Spring Boot所提供的功能。

在 2013年的11月,我與好友Josh Long共進午餐,當時他正在巴黎休假。當我們在星巴克喝咖啡的時候,他向我介紹了Spring Boot:我馬上認識到它能夠給JHipster帶來很大的幫助,Spring Boot替換了我們自定義的Spring代碼,這是項目的一個巨大進步。兩年后,我可以很高興地說這是一個正確的決策!

InfoQ:在Spring Boot的不同版本間進行升級的時候,您有什么經驗嗎?

Dubois:升級Spring Boot版本通常會耗費一些時間,這是因為我們與它進行了緊密的集成。我們使用了Spring Boot所提供的Maven BOM(Bill Of Materials),所以需要檢查對其進行升級時,我們的功能是否能夠正常運行:通常這不會有什么問題,但我們有一些第三方依賴,所以可能會出現問題,這需要我們指定依賴的具體版本號。新的Spring Boot版本也會提供新的特性,如新的健康檢查和自動化配置:在這種情況下,我們的主要任務是與其進行集成,移除完成相同功能的已有代碼,我們可能會在此之上添加一個圖形化的界面。

一個很好的例子就是Spring Boot 1.3所提供的對Cassandra的支持,來自JHipster的代碼也包含在了Spring Boot中。顯然,我們需要刪除掉所有來自JHipster的代碼并使用Spring Boot所提供的代碼!對我們來說,這是很好的事情,因為這種技術化的代碼顯然不應該在JHipster的范圍內,只有沒有更好的解決方案時,我們才會將其添加到我們的項目中。

InfoQ:在Spring Boot 1.3中,你最喜歡的特性是什么?

Dubois: 在Spring Boot 1.3中,有一個屬性我非常喜歡,那就是新的devtools!!!在開發JHipster的時候,我們曾經非常艱苦地實現熱重載功能:可以看一下我們的JHipster Loaded項目,它現在已經消亡了,參見 https://github.com/jhipster/jhipster-loaded 。這涉及了很多的工作,我們為此花費了數周的時間,最終的結果卻是依然有很多bug。新的Spring Boot devtools很漂亮地解決了這個問題,并且沒有那么多的bug!對于我們的終端用戶來說,整體的體驗非常棒,因為他們可以通過BrowserSync 實現前端更新,同時還能通過Spring Boot devtools實現后端更新。這能夠帶來非常好的體驗,所有的內容都能隨時自動更新,這使用起來非常棒,對于來自傳統Java開發環境的人來說,這簡直就是一種驚喜。

InfoQ:您有什么特殊的特性希望添加到Spring Boot中嗎?

Dubois: 對我來講,這是在Spring中長期存在的一個問題,那就是我希望有更短的啟動時間。Devtools在開發階段實現了這一點,但是對于很多云提供商來說,啟動時間也是很重要的。例如,有些Spring bean可以異步啟動:實際上,這也是我們為支持Liquibase所采用的手動編碼的方式,這使我們的啟動時間下降了40%。當然,它可以更加智能一些,以最佳方式使用所有可用的CPU核心。

查看英文原文: Spring Boot 1.3 Released Featuring DevTools and ASCII Art

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!