微服務

雲原生時代下微服務架構演進之路 (8)

透過本篇文章您可以瞭解到以下內容:

  • Spring Boot發展歷史
  • Spring Boot核心特性
  • Spring Boot 版本遷移
  • 總結

Spring Boot 發展歷史

首先讓我們來看看,什麼是Spring Boot呢?  簡單的來說Spring Boot就是一個Java Web開發框架。 Spring Boot是基於Spring開發的,與此同時與Spring框架緊密結合,從而極大提升了Java開發者的開發體驗。

我們知道,隨著Spring不斷的發展壯大,涉及的領域越來越多,從而對於專案整合時開發者需要配置的文件數量也隨之增加。 同時也加大了開發者的學習曲線。 Spring Boot正是在這樣的一個背景下被創造出來的。 當我們談到Spring Boot的發展歷史時,我們首先要從一個Jira 說起。

早在2012年的10月12日,Mike Youngstrom 在Spring Jira中 提交了一個名為Improved support for ‘containerless’ web application architectures Spring (Spring 框架中支持無容器 Web 應用程式體系結構)的請求。 在這個請求中Mike Youngstrom對現有開發人員需要面臨克服的學習曲線進行了一一闡述:

英文描述:

  • web.xml and other Servlet oriented configuration concepts
  • War directory structure
  • Container implementation specific items (e.g. ports, thread pools, etc.)
  • Complex Classloading hierarchies
  • Monitoring and management facilities configured outside of the application
  • Logging facilities
  • Configuration of application context roots

中文描述:

  • web.xml以及其他面向Servlet配置的概念。
  • War目錄結構
  • 容器實現特定項(如 ports, thread pools…等)
  • 複雜類載入層次結構
  • 應用程式外部配置的監控和管理設施
  • 日誌工具
  • 應用程式上下文的配置

同時Mike Youngstrom 指出為了實現這種簡化,認為Spring不需要創建一個全新的HTTP引擎。 它可以簡單地利用嵌入式servlet容器,如Jetty。 儘管它需要盡可能多地抽象配置。

Jira的詳細內容可以參考以下連結: https://jira.spring.io/browse/SPR-9888?redirect=false

兩年後也就是2014年的4月Spring Boot 1.0.0正式發佈,從那以後一些Spring Boot的版本也隨之而出 ,以下是關於各個Spring Boot主要版本發佈的說明連結:

Spring boot 1.1 – Spring Boot 2.4

Spring Boot 2.5

Spring Boot 2. 6

Spring Boot 2. 7

正是由於Spring Boot的簡單、快速、開箱即用等特性,使得Java 開發人員能夠快速大規模採用,並且大大降低了學習曲線。 正如JRebel的2022年開發者生產力報告中提到的那樣,Spring Boot已經作為 Java開發微服務首選的框架,並且佔有主導位置。

( jrebel-2022-java-developer-productivity-report )

至此相信大家對Spring Boot的發展歷史有一個清晰的了解,那麼接下來讓我們看看Spring Boot具有哪些核心特性。

Spring Boot 核心特性

Spring Boot之所以被Java開發者廣泛使用,離不開它所具有的強大特性和設計原則,那麼接下來就讓我們深入瞭解下Spring Boot的核心特性。

核心特性一

遵循約定大於配置的核心思想。 使用Spring Boot我們只需要進行非常少的配置,而且大多數的情況可以使用預設配置即可。

核心特性二

相比傳統Spring 專案例如Spring MVC,我們可以完全不使用XML配置,只需要使用自動配置以及Java Config方式即可。

核心特性三

內嵌Servlet容器,降低了對環境的依賴程度,以及大大減少了學習成本,相比war方式的部署,可以直接使用jar的方式進行部署,同時可以透過簡單的命令java -jar xx.jar 進行啟動。

核心特性四

依賴管理Spring Boot提供starter機制,從而大大簡化了Maven配置。 此外可以透過 https://start.spring.io 進行項目建構。 透過選擇添加專案所需要的依賴,幫助開發者快速建構專案骨架,例如常用的spring-boot-starter-web等依賴。

核心特性五

應用的可觀測性,Spring Boot提供了對當前應用可觀測的解決方案,也就是我們熟知的actuator。 實現這種功能,只需要添加spring-boot-starter-actuator,我們就可以獲取面向生產就緒的監控數據,如應用運行時狀態等,從而可以幫助開發和維運人員快速定位系統問題。

核心特性六

對Spring自動裝配,Spring Boot會為jar包的類進行自動對Bean的裝配。 這樣會極大減少所需要使用的配置。 這種操作可以覆蓋大多數的開發場景,如果實際開發過程中我們需要配置特定的Bean,可以使用Spring Boot自定義自動配置的能力。

Spring Boot 版本遷移

首先我們來看看Spring Boot官方對於版本發佈的說明:

可以看到的是,主要版本的發佈週期是每六個月一次,同時對於每一個主要的版本,無論是開源社區的版本還是商業支援的版本都會有與之對應的End of Support日期。 以下就是主要版本的時間週期情況

此外一個主要的新版本發佈可能會帶來一些新的功能以及老舊Bug的修復。 那麼如果選擇進行新版本的升級,最佳升級的路徑是怎樣呢? 關於這個問題,大體可以理解分為兩類:

第一類: Spring Boot 1. X 的版本到Spring Boot 2.0

對於Spring Boot 1. x的版本目前早已經不再維護,如果需要進行版本的升級,可以參考官方給出的遷移實踐路徑,對應的連結在此

第二類: Spring Boot 2.x 版本的升級

比如,是否因為版本的升級,修改或者重命名一些配置檔,亦或有一些依賴已經在新的版本中進行了移除?  正是因為諸如此類的問題,從Spring Boot的角度,提供了一個關於遷移的開源專案,我們稱之為spring-boot-properties-migrator。

如果需要啟用該特性需要將下方的依賴添加到所對應的工程當中(以Maven為例)

對於這種特性的詳細說明,我們可以在對應的Spring Boot官方文檔中查看,此連結是以Spring Boot2.7.3文檔進行說明

總結

回顧全篇內容,整體包括以下內容:

  • 首先在開篇我們對Spring Boot的發展歷史有了一個全面清晰的瞭解。
  • 其次我們對Spring Boot的核心特性進行了深入展開的討論。
  • 最後在關於Spring Boot版本遷移的方面給出了最佳實踐路徑。

至此我們可以利用Spring Boot來建構每一個微服務,那麼在微服務架構體系中我們遇到的常見問題又如何解決呢?  比如微服務體系下註冊中心的搭建、微服務之間調用的負載均衡、熔斷、降級、限流等,這些問題Spring又會給出哪些開箱即用的解決方案呢?  在下一章節中我們會深入瞭解Spring Cloud,微服務架構的解決方案。 敬請期待!

參考連結:

  1. https://github.com/spring-projects/spring-boot
  2. https://docs.spring.io/spring-boot/docs/2.7.3/reference/pdf/spring-boot-reference.pdf
  3. jrebel-2022-java-developer-productivity-report

作者簡介

李剛,VMware 大中華區應用現代化部門高級系統架構師,資深企業級軟體開發和軟體系統架構師。 Spring Cloud開源社區項目貢獻者、Netflix開源社區貢獻者。 近幾年,參與並主導了許多大型企業客戶的應用現代化數位轉型專案,涉及物流、製造、金融等諸多領域。 特別對微服務實現方法、現代化應用架構設計、雲原生實施落地、開源軟體技術等方面有著豐富經驗。

评论

发表评论

电子邮件地址不会被公开。

This site uses Akismet to reduce spam. Learn how your comment data is processed.