爲何說 Java 程序員到了必須掌握 Spring Boot 的時候?

Spring 歷史
提及 Spring Boot 咱們不得不先了解一下 Spring 這個企業,不只由於 Spring Boot 來源於 Spirng 你們族,並且 Spring Boot 的誕生和 Sping 框架的發展息息相關。前端

時間回到2002年,當時正是 Java EE 和 EJB 大行其道的時候,不少知名公司都是採用此技術方案進行項目開發。這時候有一個美國的小夥子認爲 EJB 太過臃腫,並非全部的項目都須要使用 EJB 這種大型框架,應該會有一種更好的方案來解決這個問題。java

爲了證實他的想法是正確的,於2002年10月甚至寫了一本書《 Expert One-on-One J2EE 》,介紹了當時 Java 企業應用程序開發的狀況,並指出了 Java EE 和 EJB 組件框架中存在的一些主要缺陷。在這本書中,他提出了一個基於普通 Java 類和依賴注入的更簡單的解決方案。程序員

在書中,他展現瞭如何在不使用 EJB 的狀況下構建高質量,可擴展的在線座位預留系統。爲了構建應用程序,他編寫了超過 30,000 行的基礎結構代碼,項目中的根包命名爲 com.interface21,因此人們最初稱這套開源框架爲 interface21,也就是 Spring 的前身。web

他是誰呢,他就是大名鼎鼎的 Rod Johnson (下圖), Rod Johnson 在悉尼大學不只得到了計算機學位,同時還得到了音樂學位,更使人吃驚的是在回到軟件開發領域以前,他還得到了音樂學的博士學位。如今 Rod Johnson 已經離開了 Spring ,成爲了一個天使投資人,同時也是多個公司的董事,早已走上人生巔峯。spring

爲何說 Java 程序員到了必須掌握 Spring Boot 的時候?
在這本書發佈後,一對一的 J2EE 設計和開發一炮而紅。這本書免費提供的大部分基礎架構代碼都是高度可重用的。 2003 年 Rod Johnson 和同伴在此框架的基礎上開發了一個全新的框架命名爲 Spring ,據 Rod Johnson 介紹 Spring 是傳統 J2EE 新的開始。隨後 Spring 發展進入快車道。數據庫

2004 年 03 月,1.0 版發佈。
2006 年 10 月,2.0 版發佈。
2007 年 11 月改名爲 SpringSource,同時發佈了 Spring 2.5。
2009 年 12 月,Spring 3.0 發佈。
2013 年 12 月,Pivotal 宣佈發佈 Spring 框架 4.0。
2017 年 09 月,Spring 5.0 發佈。
Spring Boot 的誕生
隨着使用 Spring 進行開發的我的和企業愈來愈多,Spring 也慢慢從一個單一簡潔的小框架變成一個大而全的開源軟件,Spring 的邊界不斷的進行擴充,到了後來 Spring 幾乎能夠作任何事情了,市面上主流的開源軟件、中間件都有 Spring 對應組件支持,人們在享用 Spring 的這種便利以後,也遇到了一些問題。編程

Spring 每集成一個開源軟件,就須要增長一些基礎配置,慢慢的隨着人們開發的項目愈來愈龐大,每每須要集成不少開源軟件,所以後期使用 Spirng 開發大型項目須要引入不少配置文件,太多的配置很是難以理解,並容易配置出錯,到了後來人們甚至稱 Spring 爲配置地獄。緩存

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

Spring Boot 誕生之初,就受到開源社區的持續關注,陸續有一些我的和企業嘗試着使用了 Spring Boot,並迅速喜歡上了這款開源軟件。直到2016年,在國內 Spring Boot 才被正真使用了起來,期間不少研究 Spring Boot 的開發者在網上寫了大量關於 Spring Boot 的文章,同時有一些公司在企業內部進行了小規模的使用,並將使用經驗分享了出來。從2016年到2018年,使用 Spring Boot 的企業和我的開發者愈來愈多,咱們從 Spring Boot 關鍵字的百度指數就能夠看出。安全

爲何說 Java 程序員到了必須掌握 Spring Boot 的時候?
上圖爲2014年到2018年 Spring Boot 的百度指數,能夠看出 Spring Boot 2.0 的推出引起了搜索高峯。

固然 Spring Boot 不是爲了取代 Spring ,Spring Boot 基於 Spring 開發,是爲了讓人們更容易的使用 Spring。看到 Spring Boot 的市場反應,Spring 官方也很是重視 Spring Boot 的後續發展,已經將 Spring Boot 做爲公司最頂級的項目來推廣,放到了官網上第一的位置,所以後續 Spring Boot 的持續發展也被看好。
爲何說 Java 程序員到了必須掌握 Spring Boot 的時候?

什麼是 Spring Boot
Spring Boot 介紹

Spring Boot 是由 Pivotal 團隊提供的全新框架,其設計目的是用來簡化新 Spring 應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員再也不須要定義樣板化的配置。用個人話來理解,就是 Spring Boot 其實不是什麼新的框架,它默認配置了不少框架的使用方式,就像 maven 整合了全部的 jar 包,Spring Boot 整合了全部的框架(不知道這樣比喻是否合適)。

Spring Boot 簡化了基於 Spring 的應用開發,經過少許的代碼就能建立一個獨立的、產品級別的 Spring 應用。 Spring Boot 爲 Spring 平臺及第三方庫提供開箱即用的設置,這樣你就能夠有條不紊地開始。Spring Boot 的核心思想就是約定大於配置,多數 Spring Boot 應用只須要不多的 Spring 配置。採用 Spring Boot 能夠大大的簡化你的開發模式,全部你想集成的經常使用框架,它都有對應的組件支持。

Spring Boot 特性

使用 Spring 項目引導頁面能夠在幾秒構建一個項目
方便對外輸出各類形式的服務,如 REST API、WebSocket、Web、Streaming、Tasks
很是簡潔的安全策略集成
支持關係數據庫和非關係數據庫
支持運行期內嵌容器,如 Tomcat、Jetty
強大的開發包,支持熱啓動
自動管理依賴
自帶應用監控
支持各類 IED,如 IntelliJ IDEA 、NetBeans
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 項目須要哪些操做呢?

1)登陸網址 http://start.spring.io/ 選擇對應的組件直接下載
2)導入項目,直接開發
上面的 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 Test 中包含了咱們須要使用的各類測試場景,知足咱們平常項目的測試需求。

Spring Boot 讓配置變得更簡單
Spring Boot 讓配置變簡單,說到這裏咱們就須要瞭解一下 Spring Boot 的核心思想:約定優於配置。那麼什麼是約定優於配置呢?

約定優於配置(convention over configuration),也稱做按約定編程,是一種軟件設計範式,旨在減小軟件開發人員需作決定的數量,得到簡單的好處,而又不失靈活性。

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

Spring Boot 讓部署變得更簡單
提及 Spring Boot 讓部署變簡單,就不得不說 Spring Boot 內嵌容器。內嵌容器不僅讓部署變得簡單,其實在開發調試階段也會帶來很是大的便利性,對比以往開發 Web 項目時配置 Tomcat 的繁瑣,會讓你們使用 Spring Boot 內嵌容器開發時有更深的感觸。使用 Spring Boot 開發 Web 項目,讓咱們不須要關心容器的環境問題,專心寫業務代碼便可。

Jenkins 是目前持續構建領域使用最普遍的工具之一,Jenkins 是一個獨立的開源自動化服務器,可用於自動化各類任務,如構建,測試和部署軟件。Jenkins 能夠經過本機系統包 Docker 安裝,甚至能夠經過安裝 Java Runtime Environment 的任何機器獨立運行。

說直白一點 Jenkins 就是專門來負責如何將代碼變成可執行的程序包,將它部署到目標服務器中,並對其運營狀態(日誌)進行監控的軟件。自動化、性能、打包、部署、發佈、發佈結果自動化驗證、接口測試、單元測試等等關於咱們打包測試部署的方方面面 Jenkins 均可以很友好的支持。

使用 Jenkins 部署 Spring Boot 項目很是簡單,你們想繼續瞭解能夠參考個人文章:使用Jenkins部署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 應用程序的開源軟件。每一個應用都認爲是一個客戶端,經過 HTTP 或者使用 Eureka 註冊到 admin server 中進行展現,Spring Boot Admin UI 部分使用 AngularJs 將數據展現在前端。

Spring Boot Admin 是一個針對 spring-boot 的 actuator 接口進行UI美化封裝的監控工具。他能夠:在列表中瀏覽全部被監控 spring-boot 項目的基本信息,詳細的 Health 信息、內存信息、JVM 信息、垃圾回收信息、各類配置信息(好比數據源、緩存列表和命中率)等,還能夠直接修改logger的level。

使用 Spring Boot Admin 不只能夠監控 Spring Boot 項目,還能夠監控 Spring Cloud 項目,所以使用了 Spring Boot 項目以後咱們監控 Spring Boot 集羣效果以下:
爲何說 Java 程序員到了必須掌握 Spring Boot 的時候?

簡單、直觀、易用是它的特色,針對一些特殊狀況還能夠提供報警服務。因此說使用 Spring Boot Actuator 解決了單個 Spring Boot 的監控問題,使用 Spring Boot Admin 就是解決了整個集羣監控的問題。

Spring 、Spring Boot 和 Spring Cloud 的關係
Spring 最初最核心的兩大核心功能 Spring Ioc 和 Spring Aop 成就了 Spring,Spring 在這兩大核心的功能上不斷的發展,纔有了 Spring 事務、Spirng Mvc 等一系列偉大的產品,最終成就了 Spring 帝國,到了後期 Spring 幾乎能夠解決企業開發中的全部問題。

Spring Boot 是在強大的 Spring 帝國生態基礎上面發展而來,發明 Spring Boot 不是爲了取代 Spring ,是爲了讓人們更容易的使用 Spring 。因此說沒有 Spring 強大的功能和生態,就不會有後期的 Spring Boot 火熱, Spring Boot 使用約定優於配置的理念,從新重構了 Spring 的使用,讓 Spring 後續的發展更有生命力。

Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,均可以用 Spring Boot 的開發風格作到一鍵啓動和部署。

Spring 並無重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,經過 Spring Boot 風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式系統開發工具包。

根據上面的說明咱們能夠看出來,Spring Cloud 是爲了解決微服務架構中服務治理而提供的一系列功能的開發框架,而且 Spring Cloud 是徹底基於 Spring Boot 而開發,Spring Cloud 利用 Spring Boot 特性整合了開源行業中優秀的組件,總體對外提供了一套在微服務架構中服務治理的解決方案。

綜上咱們能夠這樣來理解,正是因爲 Spring Ioc 和 Spring Aop 兩個強大的功能纔有了 Spring ,Spring 生態不斷的發展纔有了 Spring Boot ,使用 Spring Boot 讓 Spring 更易用更有生命力,Spring Cloud 是基於 Spring Boot 開發的一套微服務架構下的服務治理方案。

用一組不太合理的包含關係來表達它們之間的關係。

Spring ioc/aop > Spring > Spring Boot > Spring Cloud
給你們推薦一個專門收集 Spring Boot 學習資源的網站:Spring Boot 中文索引

總結
不知道何時起,行業裏一些開發人員願意相信,使用複雜的軟件就意味着採用了高深的技術;使用了大量的配置,就意味着軟件有着不少比較強大的功能。在產品設計的時候有一個理念就是讓產品操做足夠的傻瓜化,假設用戶是一個智商並不高的羣體,卻可使他很容易的學會使用其產品,將此特性作爲產品設計的一項標準之一。

其實咱們的開源軟件也是一款產品,繁瑣並不意味着功能強大,反而有多是設計不夠合理;簡潔也並不意味着簡單,頗有可能它只是將衆多複雜的功能進行了封裝,讓咱們在使用的時候足夠的簡單。好的產品如此,好的開源軟件也應該如此,Spring Boot 的出現就是讓編程變得更簡單一些。

在此引用 Python 的經典設計格言,格言來源於 Python 但不限於 Python。

美麗優於醜陋。清楚優於含糊。簡單優於複雜。複雜優於繁瑣。平坦優於曲折。寬鬆優於密集。重要的是可讀性。特殊的案例不足以特殊到破壞規則。儘管實踐能夠打破真理。錯誤卻不可置之不理。除非另有明確要求。面對模棱兩可,拒絕猜想。總會有一個 —— 最好是隻有一個 —— 顯而易見的方式來明辨。哪怕這種方式在開始的時候可能並不明顯。如今有比沒有好。儘管沒有常常好於如今。若是如何實現很難被解釋清楚,那麼這個想法就是一個壞想法。若是如何實現能夠被很好的解釋,那麼這是一個好想法。

相關文章
相關標籤/搜索