淺談Java中Spring Boot的優(yōu)勢(shì)
Spring Boot 是由 Pivotal 團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新 Spring 應(yīng)用的初始搭建以及開發(fā)過(guò)程。該框架使用了特定的方式來(lái)進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置。 Spring Boot 簡(jiǎn)化了基于 Spring 的應(yīng)用開發(fā),通過(guò)少量的代碼就能創(chuàng)建一個(gè)獨(dú)立的、產(chǎn)品級(jí)別的 Spring 應(yīng)用。
作為一名 Java 程序員如果你已經(jīng)厭惡了傳統(tǒng)的開發(fā)模式,希望有一個(gè)全新的框架可以提供快速開發(fā),簡(jiǎn)單集成的編程體驗(yàn),強(qiáng)烈建議你學(xué)習(xí)了解 Spring Boot 。Spring Cloud 未來(lái)隨著 Kubernetes 和 Service Mesh 的發(fā)展可能會(huì)有所弱化,但是 Spring Boot 給開發(fā)帶來(lái)的影響是深遠(yuǎn)的。
Spring Boot 的誕生
隨著 Spring 集成的軟件越來(lái)越多,Spring 也慢慢從一個(gè)單一簡(jiǎn)潔的小框架變成一個(gè)大而全的開源軟件,Spring 的邊界不斷的進(jìn)行擴(kuò)充,到了后來(lái) Spring 幾乎可以做任何事情了,市面上主流的開源軟件、中間件都有 Spring 對(duì)應(yīng)組件支持,人們?cè)谙碛?Spring 的這種便利之后,也遇到了一些問(wèn)題。
Spring 每集成一個(gè)開源軟件,就需要增加一些基礎(chǔ)配置,慢慢的隨著人們開發(fā)的項(xiàng)目越來(lái)越龐大,往往需要集成很多開源軟件,因此后期使用 Spring 開發(fā)大型項(xiàng)目需要引入很多配置文件,太多的配置非常難以理解,并容易配置出錯(cuò),到了后來(lái)人們甚至稱 Spring 為配置地獄。
Spring 似乎也意識(shí)到了這些問(wèn)題,急需有這么一套軟件可以解決這些問(wèn)題,這個(gè)時(shí)候微服務(wù)的概念也慢慢興起,快速開發(fā)微小獨(dú)立的應(yīng)用變得更為急迫,Spring 剛好處在這么一個(gè)交叉點(diǎn)上,于 2013 年初開始的 Spring Boot 項(xiàng)目的研發(fā),2014年4月,Spring Boot 1.0.0 發(fā)布。
上圖為2014年到2018年 Spring Boot 的百度指數(shù),可以看出 Spring Boot 2.0 的推出引發(fā)了搜索高峰。
Spring Boot 不是為了取代 Spring ,Spring Boot 基于 Spring 開發(fā),是為了讓人們更容易的使用 Spring??吹?Spring Boot 的市場(chǎng)反應(yīng),Spring 官方也非常重視 Spring Boot 的后續(xù)發(fā)展,已經(jīng)將 Spring Boot 作為公司最頂級(jí)的項(xiàng)目來(lái)推廣,放到了官網(wǎng)上第一的位置,因此后續(xù) Spring Boot 的持續(xù)發(fā)展也被看好。
使用 Spring Boot 的優(yōu)勢(shì)
Spring Boot 讓開發(fā)變得更簡(jiǎn)單
Spring Boot 對(duì)開發(fā)效率的提升是全方位的,我們可以簡(jiǎn)單做一下對(duì)比:
在沒(méi)有使用 Spring Boot 之前我們開發(fā)一個(gè) web 項(xiàng)目需要做哪些工作:
1)配置 web.xml,加載 Spring 和 Spring mvc
2)配置數(shù)據(jù)庫(kù)連接、配置 Spring 事務(wù)
3)配置加載配置文件的讀取,開啟注解
4)配置日志文件
…
n) 配置完成之后部署 tomcat 調(diào)試
可能你還需要考慮各個(gè)版本的兼容性,jar 包沖突的各種可行性。
那么使用 Spring Boot 之后我們需要開發(fā)一個(gè) web 項(xiàng)目需要哪些操作呢?
1)登錄網(wǎng)址 http://start.spring.io/ 選擇對(duì)應(yīng)的組件直接下載
2)導(dǎo)入項(xiàng)目,直接開發(fā)
上面的 N 步和下面的2步形成巨大的反差,這僅僅只是在開發(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 讓配置變得更簡(jiǎn)單
Spring Boot 讓配置變簡(jiǎn)單,說(shuō)到這里我們就需要了解一下 Spring Boot 的核心思想:約定優(yōu)于配置。那么什么是約定優(yōu)于配置呢?約定優(yōu)于配置(convention over configuration),也稱作按約定編程,是一種軟件設(shè)計(jì)范式,旨在減少軟件開發(fā)人員需做決定的數(shù)量,獲得簡(jiǎn)單的好處,而又不失靈活性。
本質(zhì)是說(shuō),開發(fā)人員僅需規(guī)定應(yīng)用中不符約定的部分。例如,如果模型中有個(gè)名為 User 的類,那么數(shù)據(jù)庫(kù)中對(duì)應(yīng)的表就會(huì)默認(rèn)命名為 user。只有在偏離這一約定時(shí),例如將該表命名為”user_info”,才需寫有關(guān)這個(gè)名字的配置。
Spring Boot 體系將約定優(yōu)于配置的思想展現(xiàn)得淋淋盡致,小到配置文件,中間件的默認(rèn)配置,大到內(nèi)置容器、生態(tài)中的各種 Starters 無(wú)不遵循此設(shè)計(jì)規(guī)則。Spring Boot 鼓勵(lì)各軟件組織方創(chuàng)建自己的 Starters ,創(chuàng)建 Starter 的核心組件之一就是 autoconfigure 模塊,也是 Starter 的核心功能就是在啟動(dòng)的時(shí)候進(jìn)行自動(dòng)裝配,屬性默認(rèn)化配置。
Spring Boot 讓部署變得更簡(jiǎn)單
說(shuō)起 Spring Boot 讓部署變簡(jiǎn)單,就不得不說(shuō) Spring Boot 內(nèi)嵌容器。內(nèi)嵌容器不只讓部署變得簡(jiǎn)單,其實(shí)在開發(fā)調(diào)試階段也會(huì)帶來(lái)非常大的便利性,對(duì)比以往開發(fā) Web 項(xiàng)目時(shí)配置 Tomcat 的繁瑣,會(huì)讓大家使用 Spring Boot 內(nèi)嵌容器開發(fā)時(shí)有更深的感觸。使用 Spring Boot 開發(fā) Web 項(xiàng)目,讓我們不需要關(guān)心容器的環(huán)境問(wèn)題,專心寫業(yè)務(wù)代碼即可。
但內(nèi)嵌容器對(duì)部署帶來(lái)的改變其實(shí)更多,現(xiàn)在 Maven 、Gradle 已經(jīng)成了我們?nèi)粘i_發(fā)必不可少的構(gòu)建工具,使用這些工具很容易的將項(xiàng)目打包成 Jar 或者 War 包,在服務(wù)器上我們僅僅只需要一條命令就可以啟動(dòng)項(xiàng)目。Spring Boot 支持在啟動(dòng)的時(shí)候添加定制,比如設(shè)置應(yīng)用的堆內(nèi)存、垃圾回收機(jī)制、日志路徑等等。
虛擬化技術(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)控的開源軟件,在設(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)目將變得比較緊迫。在開源界也有人意識(shí)到了這個(gè)問(wèn)題,并且基于 Spring boot actuator 做出了一款強(qiáng)大的監(jiān)控軟件,這個(gè)軟件就是 Spring Boot admin 。
使用 Spring Boot Admin 不僅可以監(jiān)控 Spring Boot 項(xiàng)目,還可以監(jiān)控 Spring Cloud 項(xiàng)目,因此使用了 Spring Boot 項(xiàng)目之后我們監(jiān)控 Spring Boot 集群效果如下:
簡(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)題。
相關(guān)文章
Java+Selenium實(shí)現(xiàn)文件上傳下載功能詳解
這篇文章主要介紹了java代碼如何利用selenium操作瀏覽器上傳和下載文件功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-01-01使用SpringBoot與Thrift實(shí)現(xiàn)RPC通信的方式詳解
在微服務(wù)架構(gòu)的世界里,服務(wù)間的通信機(jī)制選擇成為了關(guān)鍵決策之一,RPC因其簡(jiǎn)潔、高效的特點(diǎn)備受青睞,本文將詳細(xì)探討如何利用Spring?Boot和Thrift框架構(gòu)建RPC通信,讓讀者理解其內(nèi)在原理及實(shí)現(xiàn)方式,需要的朋友可以參考下2023-10-10java對(duì)象轉(zhuǎn)成byte數(shù)組的3種方法
這篇文章主要為大家詳細(xì)介紹了java對(duì)象轉(zhuǎn)成byte數(shù)組的3種方法,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2018-06-06Spring?MVC?前端控制器?(DispatcherServlet)處理流程解析
DispatcherServlet是前置控制器,配置在web.xml文件中的,這篇文章主要介紹了Spring?MVC?前端控制器?(DispatcherServlet)處理流程,需要的朋友可以參考下2022-05-05MyBatis傳入List集合查詢數(shù)據(jù)問(wèn)題
這篇文章主要介紹了MyBatis傳入List集合查詢數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Spring?Security?基于URL的權(quán)限判斷源碼解析
這篇文章主要介紹了Spring?Security?基于URL的權(quán)限判斷問(wèn)題,我們想要實(shí)現(xiàn)自己的基于請(qǐng)求Url的授權(quán)只需自定義一個(gè)?AccessDecisionManager即可,接下來(lái)跟隨小編一起看看實(shí)現(xiàn)代碼吧2021-12-12解決SpringMVC接收不到ajaxPOST參數(shù)的問(wèn)題
今天小編就為大家分享一篇解決SpringMVC接收不到ajaxPOST參數(shù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08