Spring Boot,讓Java開發變得更簡單!

Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。

該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。

Spring Boot,讓Java開發變得更簡單!

那麼,我們為什麼要學習Spring Boot呢?

具我所知,Spring Boot近幾年來深受Java開發者們的喜愛,還有人稱Spring Boot是Java應用開發的顛覆者。

總的來說,Spring Boot提供了一種新的編程範式,它簡化了基於 Spring 的應用開發,通過少量的代碼就能創建一個獨立的、產品級別的 Spring 應用。

有了它, 我們可以更加敏捷地開發Spring應用程序,專注於應用程序的功能,不用在Spring的配置上多花功夫,甚至完全不用配置。

Spring Boot 的誕生

隨著 Spring 集成的軟件越來越多,Spring 也慢慢從一個單一簡潔的小框架變成一個大而全的開源軟件,Spring 的邊界不斷的進行擴充,到了後來 Spring 幾乎可以做任何事情了,市面上主流的開源軟件、中間件都有 Spring 對應組件支持,人們在享用 Spring 的這種便利之後,也遇到了一些問題。

Spring 每集成一個開源軟件,就需要增加一些基礎配置,慢慢的隨著人們開發的項目越來越龐大,往往需要集成很多開源軟件,因此後期使用 Spring 開發大型項目需要引入很多配置文件,太多的配置非常難以理解,並容易配置出錯,到了後來人們甚至稱 Spring 為配置地獄。

Spring 似乎也意識到了這些問題,急需有這麼一套軟件可以解決這些問題,這個時候微服務的概念也慢慢興起,快速開發微小獨立的應用變得更為急迫,Spring 剛好處在這麼一個交叉點上,於 2013 年初開始的 Spring Boot 項目的研發,2014年4月,Spring Boot 1.0.0 發佈。

Spring Boot,讓Java開發變得更簡單!

上圖為2014年到2018年 Spring Boot 的百度指數,可以看出 Spring Boot 2.0 的推出引發了搜索高峰。

Spring Boot 不是為了取代 Spring ,Spring Boot 基於 Spring 開發,是為了讓人們更容易的使用 Spring。看到 Spring Boot 的市場反應,Spring 官方也非常重視 Spring Boot 的後續發展,已經將 Spring Boot 作為公司最頂級的項目來推廣,放到了官網上第一的位置,因此後續 Spring Boot 的持續發展也被看好。

Spring Boot,讓Java開發變得更簡單!

Spring Boot 特性

  • 使用 Spring 項目引導頁面可以在幾秒構建一個項目
  • 方便對外輸出各種形式的服務,如 REST API、WebSocket、Web、Streaming、Tasks
  • 非常簡潔的安全策略集成
  • 支持關係數據庫和非關係數據庫
  • 支持運行期內嵌容器,如 Tomcat、Jetty
  • 強大的開發包,支持熱啟動
  • 自動管理依賴
  • 自帶應用監控
  • 支持各種 IED,如 IntelliJ IDEA、NetBeans

Spring Boot 的優勢

Spring Boot 使開發變得簡單,提供了豐富的解決方案,快速集成各種解決方案提升開發效率。

Spring Boot 使配置變得簡單,提供了豐富的 Starters,集成主流開源產品往往只需要簡單的配置即可。

Spring Boot 使部署變得簡單,其本身內嵌啟動容器,僅僅需要一個命令即可啟動項目,結合 Jenkins、Docker 自動化運維非常容易實現。

Spring Boot 使監控變得簡單,自帶監控組件,使用 Actuator 輕鬆監控服務各項狀態。

從軟件發展的角度來講,越簡單的開發模式越流行,簡單的開發模式解放出更多生產力,讓開發人員可以避免將精力耗費在各種配置、語法所設置的門檻上,從而更專注於業務。這點上,Spring Boot 已儘可能地簡化了應用開發的門檻。

Spring Boot 的實踐

使用自定義BOM來維護第三方依賴

Spring Boot項目本身使用和集成了大量的開源項目,它幫助我們維護了這些第三方依賴。但是也有一部分在實際項目使用中並沒有包括進來,這就需要我們在項目中自己維護版本。

如果在一個大型的項目中,包括了很多未開發模塊,那麼維護起來就非常的繁瑣。

怎麼辦呢?事實上,Spring IO Platform就是做的這個事情,它本身就是Spring Boot的子項目,同時維護了其他第三方開源庫。

我們可以借鑑Spring IO Platform來編寫自己的基礎項目platform-bom,所有的業務模塊項目應該以BOM的方式引入。這樣在升級第三方依賴時,就只需要升級這一個依賴的版本而已。




io.spring.platform
platform-bom
Cairo-SR3
pom
import



使用自動配置

Spring Boot的一個主要特性是使用自動配置。這是Spring Boot的一部分,它可以簡化你的代碼並使之工作。當在類路徑上檢測到特定的jar文件時,自動配置就會被激活。

使用它的最簡單方法是依賴Spring Boot Starters。因此,如果你想與Redis進行集成,你可以首先包括:

 

org.springframework.boot
spring-boot-starter-data-redis

如果你想與MongoDB進行集成,需要這樣(但只有在絕對必要時才應該這樣做。):


org.springframework.boot
spring-boot-starter-data-mongodb

藉助於這些starters,這些繁瑣的配置就可以很好地集成起來並協同工作,而且它們都是經過測試和驗證的。這非常有助於避免可怕的Jar地獄(https://dzone.com/articles/what-is-jar-hell)。

通過使用以下註解屬性,可以從自動配置中排除某些配置類:

@EnableAutoConfiguration(exclude = {ClassNotToAutoconfigure.class})

使用Spring Initializr來開始一個新的Spring Boot項目

這一條最佳實踐來自Josh Long (Spring Advocate,@starbuxman)。

Spring Initializr(https://start.spring.io/)提供了一個超級簡單的方法來創建一個新的Spring Boot項目,並根據你的需要來加載可能使用到的依賴。

使用Initializr創建應用程序可確保你獲得經過測試和驗證的依賴項,這些依賴項適用於Spring自動配置。你甚至可能會發現一些新的集成,但你可能並沒有意識到這些。

考慮為常見的組織問題創建自己的自動配置

這一條也來自Josh Long(Spring Advocate,@starbuxman)——這個實踐是針對高級用戶的。

如果你在一個嚴重依賴Spring Boot的公司或團隊中工作,並且有共同的問題需要解決,那麼你可以創建自己的自動配置。

這項任務涉及較多工作,因此你需要考慮何時獲益是值得投入的。與多個略有不同的定製配置相比,維護單個自動配置更容易。

如果將這個提供Spring Boot配置以開源庫的形式發佈出去,那麼將極大地簡化數千個用戶的配置工作。

考慮為常見的組織問題創建自己的自動配置

儘管允許你有很大的自由,但是有一些基本規則值得遵守來設計你的源代碼結構。

  • 避免使用默認包。確保所有內容(包括你的入口點)都位於一個名稱很好的包中,這樣就可以避免與裝配和組件掃描相關的意外情況;
  • 將Application.java(應用的入口類)保留在頂級源代碼目錄中;
  • 我建議將控制器和服務放在以功能為導向的模塊中,但這是可選的。一些非常好的開發人員建議將所有控制器放在一起。不論怎樣,堅持一種風格!

提供全局異常處理

你真的需要一種處理異常的一致方法。Spring Boot提供了兩種主要方法:

你應該使用HandlerExceptionResolver定義全局異常處理策略;

你也可以在控制器上添加@ExceptionHandler註解,這在某些特定場景下使用可能會很有用。

使用日誌框架

你可能已經意識到這一點,但你應該使用Logger進行日誌記錄,而不是使用System.out.println()手動執行。這很容易在Spring Boot中完成,幾乎沒有配置。只需獲取該類的記錄器實例:

Logger logger = LoggerFactory.getLogger(MyClass.class);

這很重要,因為它可以讓你根據需要設置不同的日誌記錄級別。有關Spring Boot日誌集成點擊 這裡 有一篇實戰文章

測試你的代碼

這不是Spring Boot特有的,但它需要提醒——測試你的代碼!如果你沒有編寫測試,那麼你將從一開始就編寫遺留代碼。

如果有其他人使用你的代碼庫,那邊改變任何東西將會變得危險。當你有多個服務相互依賴時,這甚至可能更具風險。

由於存在Spring Boot最佳實踐,因此你應該考慮將Spring Cloud Contract用於你的消費者驅動契約,它將使你與其他服務的集成更容易使用。

使用測試切片讓測試更容易,並且更專注

這一條實踐來自Madhura Bhave(Spring 開發者, @madhurabhave23)。

使用Spring Boot測試代碼可能很棘手——你需要初始化數據層,連接大量服務,模擬事物……實際上並不是那麼難!答案是使用測試切片。

使用測試切片,你可以根據需要僅連接部分應用程序。這可以為你節省大量時間,並確保你的測試不會與未使用的內容相關聯。

總而言之,掌握 Spring Boot 是非常有必要的了,它讓我們編寫基於Spring的微服務正變得前所未有的簡單。因此,越早掌握這門技術對於我們來說收益也越大。


分享到:


相關文章: