什么是 Spring Boot
轉(zhuǎn)載自https://blog.csdn.net/ityouknow/article/details/80682237尖阔,感覺(jué)講的挺好简肴。
Spring Boot 介紹
Spring Boot 是由 Pivotal 團(tuán)隊(duì)提供的全新框架晃听,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新 Spring 應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。該框架使用了特定的方式來(lái)進(jìn)行配置砰识,從而使開(kāi)發(fā)人員不再需要定義樣板化的配置能扒。用我的話來(lái)理解,就是 Spring Boot 其實(shí)不是什么新的框架辫狼,它默認(rèn)配置了很多框架的使用方式初斑,就像 maven 整合了所有的 jar 包,Spring Boot 整合了所有的框架(不知道這樣比喻是否合適)膨处。
Spring Boot 簡(jiǎn)化了基于 Spring 的應(yīng)用開(kāi)發(fā)见秤,通過(guò)少量的代碼就能創(chuàng)建一個(gè)獨(dú)立的、產(chǎn)品級(jí)別的 Spring 應(yīng)用真椿。 Spring Boot 為 Spring 平臺(tái)及第三方庫(kù)提供開(kāi)箱即用的設(shè)置鹃答,這樣你就可以有條不紊地開(kāi)始。Spring Boot 的核心思想就是約定大于配置突硝,多數(shù) Spring Boot 應(yīng)用只需要很少的 Spring 配置测摔。采用 Spring Boot 可以大大的簡(jiǎn)化你的開(kāi)發(fā)模式,所有你想集成的常用框架狞换,它都有對(duì)應(yīng)的組件支持避咆。
Spring Boot 特性
使用 Spring 項(xiàng)目引導(dǎo)頁(yè)面可以在幾秒構(gòu)建一個(gè)項(xiàng)目
方便對(duì)外輸出各種形式的服務(wù)舟肉,如 REST API修噪、WebSocket查库、Web、Streaming黄琼、Tasks
非常簡(jiǎn)潔的安全策略集成
支持關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)
支持運(yùn)行期內(nèi)嵌容器樊销,如 Tomcat、Jetty
強(qiáng)大的開(kāi)發(fā)包脏款,支持熱啟動(dòng)
自動(dòng)管理依賴
自帶應(yīng)用監(jiān)控
支持各種 IED围苫,如 IntelliJ IDEA 、NetBeans
Spring Boot 這些特性會(huì)給我們研發(fā)帶來(lái)非常大的優(yōu)勢(shì)撤师,下面我們可以分開(kāi)來(lái)介紹:
使用 Spring Boot 的優(yōu)勢(shì)
使用 Spring Boot 開(kāi)發(fā)項(xiàng)目剂府,會(huì)給我們帶來(lái)非常美妙的開(kāi)發(fā)體驗(yàn),可以從以下幾個(gè)方面展開(kāi)來(lái)說(shuō)明
Spring Boot 讓開(kāi)發(fā)變得更簡(jiǎn)單
Spring Boot 對(duì)開(kāi)發(fā)效率的提升是全方位的剃盾,我們可以簡(jiǎn)單做一下對(duì)比:
在沒(méi)有使用 Spring Boot 之前我們開(kāi)發(fā)一個(gè) web 項(xiàng)目需要做哪些工作:
1)配置 web.xml腺占,加載 Spring 和 Spring mvc
2)配置數(shù)據(jù)庫(kù)連接、配置 Spring 事務(wù)
3)配置加載配置文件的讀取痒谴,開(kāi)啟注解
4)配置日志文件
…
n) 配置完成之后部署 tomcat 調(diào)試
可能你還需要考慮各個(gè)版本的兼容性衰伯,jar 包沖突的各種可行性。
那么使用 Spring Boot 之后我們需要開(kāi)發(fā)一個(gè) web 項(xiàng)目需要哪些操作呢积蔚?
1)登錄網(wǎng)址 http://start.spring.io/ 選擇對(duì)應(yīng)的組件直接下載
2)導(dǎo)入項(xiàng)目意鲸,直接開(kāi)發(fā)
上面的 N 步和下面的2步形成巨大的反差,這僅僅只是在開(kāi)發(fā)環(huán)境搭建的這個(gè)方面尽爆。
Spring Boot 使測(cè)試變得更簡(jiǎn)單
Spring Boot 對(duì)測(cè)試的支持不可謂不強(qiáng)大怎顾,Spring Boot 內(nèi)置了7種強(qiáng)大的測(cè)試框架:
JUnit: 一個(gè) Java 語(yǔ)言的單元測(cè)試框架
Spring Test & Spring Boot Test:為 Spring Boot 應(yīng)用提供集成測(cè)試和工具支持
AssertJ:支持流式斷言的 Java 測(cè)試框架
Hamcrest:一個(gè)匹配器庫(kù)
Mockito:一個(gè) java mock 框架
JSONassert:一個(gè)針對(duì) JSON 的斷言庫(kù)
JsonPath:JSON XPath 庫(kù)
我們只需要在項(xiàng)目中引入 spring-boot-start-test
依賴包,就可以對(duì)數(shù)據(jù)庫(kù)漱贱、Mock杆勇、 Web 等各種情況進(jìn)行測(cè)試。
Spring Boot Test 中包含了我們需要使用的各種測(cè)試場(chǎng)景饱亿,滿足我們?nèi)粘m?xiàng)目的測(cè)試需求蚜退。
Spring Boot 讓配置變得更簡(jiǎn)單
Spring Boot 讓配置變簡(jiǎn)單,說(shuō)到這里我們就需要了解一下 Spring Boot 的核心思想:約定優(yōu)于配置彪笼。那么什么是約定優(yōu)于配置呢钻注?
約定優(yōu)于配置(convention over configuration),也稱作按約定編程配猫,是一種軟件設(shè)計(jì)范式幅恋,旨在減少軟件開(kāi)發(fā)人員需做決定的數(shù)量,獲得簡(jiǎn)單的好處泵肄,而又不失靈活性捆交。
本質(zhì)是說(shuō)淑翼,開(kāi)發(fā)人員僅需規(guī)定應(yīng)用中不符約定的部分。例如品追,如果模型中有個(gè)名為 User 的類玄括,那么數(shù)據(jù)庫(kù)中對(duì)應(yīng)的表就會(huì)默認(rèn)命名為 user。只有在偏離這一約定時(shí)肉瓦,例如將該表命名為”user_info”遭京,才需寫有關(guān)這個(gè)名字的配置。
Spring Boot 讓部署變得更簡(jiǎn)單
說(shuō)起 Spring Boot 讓部署變簡(jiǎn)單泞莉,就不得不說(shuō) Spring Boot 內(nèi)嵌容器哪雕。內(nèi)嵌容器不只讓部署變得簡(jiǎn)單,其實(shí)在開(kāi)發(fā)調(diào)試階段也會(huì)帶來(lái)非常大的便利性鲫趁,對(duì)比以往開(kāi)發(fā) Web 項(xiàng)目時(shí)配置 Tomcat 的繁瑣斯嚎,會(huì)讓大家使用 Spring Boot 內(nèi)嵌容器開(kāi)發(fā)時(shí)有更深的感觸。使用 Spring Boot 開(kāi)發(fā) Web 項(xiàng)目挨厚,讓我們不需要關(guān)心容器的環(huán)境問(wèn)題堡僻,專心寫業(yè)務(wù)代碼即可。
Jenkins 是目前持續(xù)構(gòu)建領(lǐng)域使用最廣泛的工具之一幽崩,Jenkins 是一個(gè)獨(dú)立的開(kāi)源自動(dòng)化服務(wù)器苦始,可用于自動(dòng)化各種任務(wù),如構(gòu)建慌申,測(cè)試和部署軟件陌选。Jenkins 可以通過(guò)本機(jī)系統(tǒng)包 Docker 安裝,甚至可以通過(guò)安裝 Java Runtime Environment 的任何機(jī)器獨(dú)立運(yùn)行蹄溉。
說(shuō)直白一點(diǎn) Jenkins 就是專門來(lái)負(fù)責(zé)如何將代碼變成可執(zhí)行的程序包咨油,將它部署到目標(biāo)服務(wù)器中,并對(duì)其運(yùn)營(yíng)狀態(tài)(日志)進(jìn)行監(jiān)控的軟件柒爵。自動(dòng)化役电、性能、打包棉胀、部署法瑟、發(fā)布、發(fā)布結(jié)果自動(dòng)化驗(yàn)證唁奢、接口測(cè)試霎挟、單元測(cè)試等等關(guān)于我們打包測(cè)試部署的方方面面 Jenkins 都可以很友好的支持。
使用 Jenkins 部署 Spring Boot 項(xiàng)目非常簡(jiǎn)單麻掸,大家想繼續(xù)了解可以參考我的文章:使用Jenkins部署Spring Boot酥夭,只需要前期做一些簡(jiǎn)單的配置,當(dāng)我們需要發(fā)布項(xiàng)目時(shí)只需要點(diǎn)擊項(xiàng)目對(duì)應(yīng)的發(fā)布按鈕,就可以將項(xiàng)目從版本庫(kù)中拉取熬北、打包疙描、發(fā)布到目標(biāo)服務(wù)器中,大大簡(jiǎn)化了運(yùn)維后期的部署工作讶隐。
虛擬化技術(shù)的發(fā)展給我們帶來(lái)了更多的可能性起胰,我們可以利用容器化技術(shù),將 Spring Boot 項(xiàng)目做成鏡像整份,根據(jù)容器集群的策略來(lái)實(shí)現(xiàn)彈性擴(kuò)容待错、動(dòng)態(tài)部署等籽孙。所以 Spring Boot + Docker + Jenkins 會(huì)將 Spring Boot 項(xiàng)目的部署做得更簡(jiǎn)單化烈评、智能化。
Spring Boot 讓監(jiān)控變得更簡(jiǎn)單
可以說(shuō) Spring Boot 就是一款自帶監(jiān)控的開(kāi)源軟件犯建,在設(shè)計(jì)之初就考慮到應(yīng)用的監(jiān)控問(wèn)題讲冠,專門提供了一款監(jiān)控組件來(lái)完成這個(gè)工作,這個(gè)組件就是 Spring Boot Actuator 适瓦。
Spring Boot Actuator 是 Spring Boot 提供的對(duì)應(yīng)用系統(tǒng)監(jiān)控的集成功能竿开,可以查看應(yīng)用配置的詳細(xì)信息,例如自動(dòng)化配置信息玻熙、創(chuàng)建的 Spring beans 以及一些環(huán)境屬性等否彩。
當(dāng)然 Spring Boot Actuator 雖然可以監(jiān)控一個(gè) Spring Boot 應(yīng)用的健康情況,實(shí)際上現(xiàn)在的系統(tǒng)都是需要很多的服務(wù)相互配合來(lái)完成工作嗦随,如何通過(guò)一個(gè)監(jiān)控軟件來(lái)監(jiān)控所以的 Spring Boot 項(xiàng)目將變得比較緊迫列荔。
在開(kāi)源界也有人意識(shí)到了這個(gè)問(wèn)題,并且基于 Spring boot actuator 做出了一款強(qiáng)大的監(jiān)控軟件枚尼,這個(gè)軟件就是 Spring Boot admin 贴浙。
Spring Boot Admin 是一個(gè)管理和監(jiān)控 Spring Boot 應(yīng)用程序的開(kāi)源軟件。每個(gè)應(yīng)用都認(rèn)為是一個(gè)客戶端署恍,通過(guò) HTTP 或者使用 Eureka 注冊(cè)到 admin server 中進(jìn)行展示崎溃,Spring Boot Admin UI 部分使用 AngularJs 將數(shù)據(jù)展示在前端。
Spring Boot Admin 是一個(gè)針對(duì) spring-boot 的 actuator 接口進(jìn)行UI美化封裝的監(jiān)控工具盯质。他可以:在列表中瀏覽所有被監(jiān)控 spring-boot 項(xiàng)目的基本信息袁串,詳細(xì)的 Health 信息、內(nèi)存信息呼巷、JVM 信息囱修、垃圾回收信息、各種配置信息(比如數(shù)據(jù)源朵逝、緩存列表和命中率)等蔚袍,還可以直接修改logger的level。
使用 Spring Boot Admin 不僅可以監(jiān)控 Spring Boot 項(xiàng)目,還可以監(jiān)控 Spring Cloud 項(xiàng)目啤咽,因此使用了 Spring Boot 項(xiàng)目之后我們監(jiān)控 Spring Boot 集群效果如下:
[圖片上傳失敗...(image-75f7ee-1528981685963)]
[圖片上傳失敗...(image-5edc45-1528981685963)]
簡(jiǎn)單晋辆、直觀、易用是它的特點(diǎn)宇整,針對(duì)一些特殊情況還可以提供報(bào)警服務(wù)瓶佳。所以說(shuō)使用 Spring Boot Actuator 解決了單個(gè) Spring Boot 的監(jiān)控問(wèn)題,使用 Spring Boot Admin 就是解決了整個(gè)集群監(jiān)控的問(wèn)題鳞青。
Spring 霸饲、Spring Boot 和 Spring Cloud 的關(guān)系
Spring 最初最核心的兩大核心功能 Spring Ioc 和 Spring Aop 成就了 Spring,Spring 在這兩大核心的功能上不斷的發(fā)展臂拓,才有了 Spring 事務(wù)厚脉、Spirng Mvc 等一系列偉大的產(chǎn)品,最終成就了 Spring 帝國(guó)胶惰,到了后期 Spring 幾乎可以解決企業(yè)開(kāi)發(fā)中的所有問(wèn)題傻工。
Spring Boot 是在強(qiáng)大的 Spring 帝國(guó)生態(tài)基礎(chǔ)上面發(fā)展而來(lái),發(fā)明 Spring Boot 不是為了取代 Spring ,是為了讓人們更容易的使用 Spring 孵滞。所以說(shuō)沒(méi)有 Spring 強(qiáng)大的功能和生態(tài)中捆,就不會(huì)有后期的 Spring Boot 火熱, Spring Boot 使用約定優(yōu)于配置的理念,重新重構(gòu)了 Spring 的使用坊饶,讓 Spring 后續(xù)的發(fā)展更有生命力泄伪。
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的開(kāi)發(fā)便利性巧妙地簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開(kāi)發(fā)匿级,如服務(wù)發(fā)現(xiàn)注冊(cè)蟋滴、配置中心、消息總線根蟹、負(fù)載均衡脓杉、斷路器、數(shù)據(jù)監(jiān)控等简逮,都可以用 Spring Boot 的開(kāi)發(fā)風(fēng)格做到一鍵啟動(dòng)和部署球散。
Spring 并沒(méi)有重復(fù)制造輪子,它只是將目前各家公司開(kāi)發(fā)的比較成熟散庶、經(jīng)得起實(shí)際考驗(yàn)的服務(wù)框架組合起來(lái)蕉堰,通過(guò) Spring Boot 風(fēng)格進(jìn)行再封裝屏蔽掉了復(fù)雜的配置和實(shí)現(xiàn)原理,最終給開(kāi)發(fā)者留出了一套簡(jiǎn)單易懂悲龟、易部署和易維護(hù)的分布式系統(tǒng)開(kāi)發(fā)工具包屋讶。
根據(jù)上面的說(shuō)明我們可以看出來(lái),Spring Cloud 是為了解決微服務(wù)架構(gòu)中服務(wù)治理而提供的一系列功能的開(kāi)發(fā)框架须教,并且 Spring Cloud 是完全基于 Spring Boot 而開(kāi)發(fā)皿渗,Spring Cloud 利用 Spring Boot 特性整合了開(kāi)源行業(yè)中優(yōu)秀的組件斩芭,整體對(duì)外提供了一套在微服務(wù)架構(gòu)中服務(wù)治理的解決方案。
綜上我們可以這樣來(lái)理解乐疆,正是由于 Spring Ioc 和 Spring Aop 兩個(gè)強(qiáng)大的功能才有了 Spring 划乖,Spring 生態(tài)不斷的發(fā)展才有了 Spring Boot ,使用 Spring Boot 讓 Spring 更易用更有生命力挤土,Spring Cloud 是基于 Spring Boot 開(kāi)發(fā)的一套微服務(wù)架構(gòu)下的服務(wù)治理方案琴庵。
用一組不太合理的包含關(guān)系來(lái)表達(dá)它們之間的關(guān)系。
Spring ioc/aop > Spring > Spring Boot > Spring Cloud