1. 程式人生 > >為什麼說 Java 程式設計師到了必須掌握 Spring Boot 的時候?

為什麼說 Java 程式設計師到了必須掌握 Spring Boot 的時候?

本文作者:張強(純潔的微笑),高階 Java 工程師、架構師,GitChat 暢銷課程作者。 曾從零參與公司技術平臺建設,組織平臺進行過四次大架構升級。目前在一家第三方支付公司做技術總監,負責微服務架構實踐和大資料平臺建設。

Spring Boot 是由 Pivotal 團隊提供的全新框架,其設計目的是用來簡化新 Spring 應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。 Spring Boot 簡化了基於 Spring 的應用開發,通過少量的程式碼就能建立一個獨立的、產品級別的 Spring 應用。

作為一名 Java 程式設計師如果你已經厭惡了傳統的開發模式,希望有一個全新的框架可以提供快速開發,簡單整合的程式設計體驗,強烈建議你學習瞭解 Spring Boot 。Spring Cloud 未來隨著 Kubernetes 和 Service Mesh 的發展可能會有所弱化,但是 Spring Boot 給開發帶來的影響是深遠的。

Spring Boot 的誕生

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

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

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

上圖為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 的優勢

Spring Boot 讓開發變得更簡單

Spring Boot 對開發效率的提升是全方位的,我們可以簡單做一下對比:

在沒有使用 Spring Boot 之前我們開發一個 web 專案需要做哪些工作:

  • 1)配置 web.xml,載入 Spring 和 Spring mvc
  • 2)配置資料庫連線、配置 Spring 事務
  • 3)配置載入配置檔案的讀取,開啟註解
  • 4)配置日誌檔案
  • n) 配置完成之後部署 tomcat 除錯

可能你還需要考慮各個版本的相容性,jar 包衝突的各種可行性。

那麼使用 Spring Boot 之後我們需要開發一個 web 專案需要哪些操作呢?

上面的 N 步和下面的2步形成巨大的反差,這僅僅只是在開發環境搭建的這個方面。

Spring Boot 使測試變得更簡單

Spring Boot 對測試的支援不可謂不強大,Spring Boot 內建了7種強大的測試框架:

  • JUnit: 一個 Java 語言的單元測試框架
  • Spring Test & Spring Boot Test:為 Spring Boot 應用提供整合測試和工具支援
  • AssertJ:支援流式斷言的 Java 測試框架
  • Hamcrest:一個匹配器庫
  • Mockito:一個 java mock 框架
  • JSONassert:一個針對 JSON 的斷言庫
  • JsonPath:JSON XPath 庫

我們只需要在專案中引入spring-boot-start-test依賴包,就可以對資料庫、Mock、 Web 等各種情況進行測試。

Spring Boot 讓配置變得更簡單

Spring Boot 讓配置變簡單,說到這裡我們就需要了解一下 Spring Boot 的核心思想:約定優於配置。那麼什麼是約定優於配置呢?約定優於配置(convention over configuration),也稱作按約定程式設計,是一種軟體設計正規化,旨在減少軟體開發人員需做決定的數量,獲得簡單的好處,而又不失靈活性。

本質是說,開發人員僅需規定應用中不符約定的部分。例如,如果模型中有個名為 User 的類,那麼資料庫中對應的表就會預設命名為 user。只有在偏離這一約定時,例如將該表命名為”user_info”,才需寫有關這個名字的配置。

Spring Boot 體系將約定優於配置的思想展現得淋淋盡致,小到配置檔案,中介軟體的預設配置,大到內建容器、生態中的各種 Starters 無不遵循此設計規則。Spring Boot 鼓勵各軟體組織方建立自己的 Starters ,建立 Starter 的核心元件之一就是 autoconfigure 模組,也是 Starter 的核心功能就是在啟動的時候進行自動裝配,屬性預設化配置。

Spring Boot 讓部署變得更簡單

說起 Spring Boot 讓部署變簡單,就不得不說 Spring Boot 內嵌容器。內嵌容器不只讓部署變得簡單,其實在開發除錯階段也會帶來非常大的便利性,對比以往開發 Web 專案時配置 Tomcat 的繁瑣,會讓大家使用 Spring Boot 內嵌容器開發時有更深的感觸。使用 Spring Boot 開發 Web 專案,讓我們不需要關心容器的環境問題,專心寫業務程式碼即可。

但內嵌容器對部署帶來的改變其實更多,現在 Maven 、Gradle 已經成了我們日常開發必不可少的構建工具,使用這些工具很容易的將專案打包成 Jar 或者 War 包,在伺服器上我們僅僅只需要一條命令就可以啟動專案。Spring Boot 支援在啟動的時候新增定製,比如設定應用的堆記憶體、垃圾回收機制、日誌路徑等等。

虛擬化技術的發展給我們帶來了更多的可能性,我們可以利用容器化技術,將 Spring Boot 專案做成映象,根據容器叢集的策略來實現彈性擴容、動態部署等。所以 Spring Boot + Docker + Jenkins 會將 Spring Boot 專案的部署做得更簡單化、智慧化。

Spring Boot 讓監控變得更簡單

可以說 Spring Boot 就是一款自帶監控的開源軟體,在設計之初就考慮到應用的監控問題,專門提供了一款監控元件來完成這個工作,這個元件就是 Spring Boot Actuator 。Spring Boot Actuator 是 Spring Boot 提供的對應用系統監控的整合功能,可以檢視應用配置的詳細資訊,例如自動化配置資訊、建立的 Spring beans 以及一些環境屬性等。

當然 Spring Boot Actuator 雖然可以監控一個 Spring Boot 應用的健康情況,實際上現在的系統都是需要很多的服務相互配合來完成工作,如何通過一個監控軟體來監控所以的 Spring Boot 專案將變得比較緊迫。在開源界也有人意識到了這個問題,並且基於 Spring boot actuator 做出了一款強大的監控軟體,這個軟體就是 Spring Boot admin 。

使用 Spring Boot Admin 不僅可以監控 Spring Boot 專案,還可以監控 Spring Cloud 專案,因此使用了 Spring Boot 專案之後我們監控 Spring Boot 叢集效果如下:

簡單、直觀、易用是它的特點,針對一些特殊情況還可以提供報警服務。所以說使用 Spring Boot Actuator 解決了單個 Spring Boot 的監控問題,使用 Spring Boot Admin 就是解決了整個叢集監控的問題。

課程推薦

如今微服務架構已經慢慢成為了網際網路架構的主流,Spring Boot 正是這股潮流的主先鋒。Spring Boot 和微服務架構都是未來軟體開發的一個大趨勢,越早參與其中受益越大。但是目前網路上關於 Spring Boot 2.0 的各種資料質量參差不齊,這給初學者帶來了很大的困擾。

因此我將結合兩年多兩家公司的 Spring Boot 實踐經驗,將其中工作中最常用、最具實戰代表性的一些內容重新整理出來,以 GitChat 精品課的形式來展現。課程也增加了實戰專案的內容,讓你親自體會如何使用 Spring Boot 技術棧進行快速開發,並且可以很快的應用在工作中。

本課程共包含五大部分,由淺入深的講解了 Spring Boot 技術棧的使用場景和實踐方式:

  • PART 1:從零開始認識 Spring Boot;
  • PART 2:專案中最常用的 Web 相關技術;
  • PART 3:Spring Boot 和資料庫的技術實踐;
  • PART 4:Spring Boot 如何整合 MQ、快取、NoSQL 等中介軟體;
  • PART 5:綜合實踐。

認真學完這個課程後,將會對 Spring Boot 有進一步的瞭解,具備使用 Spring Boot 上手進行開發的基本能力。 這裡寫圖片描述