Spring Boot是什么我們知道,從 2002 年開(kāi)始,Spring 一直在飛速的發(fā)展,如今已經(jīng)成為了在Java EE(Java Enterprise Edition)開(kāi)發(fā)中真正意義上的標(biāo)準(zhǔn),但是隨著技術(shù)的發(fā)展,Java EE使用 Spring 逐漸變得笨重起來(lái),大量的 XML 文件存在于項(xiàng)目之中。繁瑣的配置,整合第三方框架的配置問(wèn)題,導(dǎo)致了開(kāi)發(fā)和部署效率的降低。
2012 年 10 月,Mike Youngstrom 在 Spring jira 中創(chuàng)建了一個(gè)功能請(qǐng)求,要求在 Spring 框架中支持無(wú)容器 Web 應(yīng)用程序體系結(jié)構(gòu)。他談到了在主容器引導(dǎo) spring 容器內(nèi)配置 Web 容器服務(wù)。
這是 jira 請(qǐng)求的摘錄:我認(rèn)為 Spring 的 Web 應(yīng)用體系結(jié)構(gòu)可以大大簡(jiǎn)化,如果它提供了從上到下利用 Spring 組件和配置模型的工具和參考體系結(jié)構(gòu)。在簡(jiǎn)單的 main()方法引導(dǎo)的 Spring 容器內(nèi)嵌入和統(tǒng)一這些常用Web 容器服務(wù)的配置。 這一要求促使了 2013 年初開(kāi)始的 Spring Boot 項(xiàng)目的研發(fā),到今天,Spring Boot 的版本已經(jīng)到了 2.0.3 RELEASE。
Spring Boot 并不是用來(lái)替代 Spring 的解決方案,而是和 Spring 框架緊密結(jié)合用于提升 Spring 開(kāi)發(fā)者體驗(yàn)的工具。同時(shí)它集成了大量常用的第三方庫(kù)配置,Spring Boot應(yīng)用中這些第三方庫(kù)幾乎可以是零配置的開(kāi)箱即用(out-of-the-box),大部分的 Spring Boot 應(yīng)用都只需要非常少量的配置代碼(基于 Java 的配置),開(kāi)發(fā)者能夠更加專注于業(yè)務(wù)邏輯。
?為什么學(xué)習(xí)Spring Boot從Spring
官方來(lái)看我們打開(kāi) Spring 的官方網(wǎng)站,可以看到:官方對(duì) Spring Boot 的定位:Build Anything, Build任何東西。Spring Boot旨在盡可能快地啟動(dòng)和運(yùn)行,并且只需最少的 Spring 前期配置。 同時(shí)我們也來(lái)看一下官方對(duì)后面兩個(gè)的定位: SpringCloud:Coordinate Anything,協(xié)調(diào)任何事情; SpringCloud Data Flow:Connect everything,連接任何東西。仔細(xì)品味一下,Spring 官網(wǎng)對(duì) Spring Boot、SpringCloud 和 SpringCloud Data Flow三者定位的措辭非常有味道,同時(shí)也可以看出,Spring 官方對(duì)這三個(gè)技術(shù)非常重視,是現(xiàn)在以及今后學(xué)習(xí)的重點(diǎn)(SpringCloud 相關(guān)達(dá)人課課程屆時(shí)也會(huì)上線)。
從Spring Boot的優(yōu)點(diǎn)來(lái)看Spring Boot 有哪些優(yōu)點(diǎn)?主要給我們解決了哪些問(wèn)題呢?我們以下圖來(lái)說(shuō)明:Spring Boot的優(yōu)點(diǎn)良好的基因Spring Boot 是伴隨著 Spring 4.0 誕生的,從字面理解,Boot是引導(dǎo)的意思,因此 Spring Boot 旨在幫助開(kāi)發(fā)者快速搭建 Spring 框架。Spring Boot 繼承了原有 Spring 框架的優(yōu)秀基因,使 Spring 在使用中更加方便快捷。Spring Boot與Spring簡(jiǎn)化編碼舉個(gè)例子,比如我們要?jiǎng)?chuàng)建一個(gè) web 項(xiàng)目,使用 Spring 的朋友都知道,在使用 Spring 的時(shí)候,需要在 pom 文件中添加多個(gè)依賴,而 Spring Boot 則會(huì)幫助開(kāi)發(fā)著快速啟動(dòng)一個(gè) web 容器,在 Spring Boot 中,我們只需要在 pom 文件中添加如下一個(gè) starter-web 依賴即可。
學(xué)習(xí)群? 64弍46衣3凌9,資料群 69似64陸0吧3
org.springframework.bootspring-boot-starter-web我們點(diǎn)擊進(jìn)入該依賴后可以看到,Spring Boot 這個(gè) starter-web 已經(jīng)包含了多個(gè)依賴,包括之前在 Spring 工程中需要導(dǎo)入的依賴,我們看一下其中的一部分,如下:org.springframeworkspring-eb5.0.7.RELEASEcompileorg.springframeworkspring-webmvc5.0.7.RELEASEcompile由此可以看出,Spring Boot 大大簡(jiǎn)化了我們的編碼,我們不用一個(gè)個(gè)導(dǎo)入依賴,直接一個(gè)依賴即可。簡(jiǎn)化配置Spring 雖然使Java EE輕量級(jí)框架,但由于其繁瑣的配置,一度被人認(rèn)為是“配置地獄”。各種XML、Annotation配置會(huì)讓人眼花繚亂,而且配置多的話,如果出錯(cuò)了也很難找出原因。Spring Boot更多的是采用 Java Config 的方式,對(duì) Spring 進(jìn)行配置。
舉個(gè)例子:我新建一個(gè)類,但是我不用 @Service注解,也就是說(shuō),它是個(gè)普通的類,那么我們?nèi)绾问顾渤蔀橐粋€(gè) Bean 讓 Spring 去管理呢?只需要@Configuration 和@Bean兩個(gè)注解即可,如下:
public class TestService
{ public String sayHello ()
{ return "Hello Spring Boot!"; }}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configurationpublic class JavaConfig {
?? @Bean public TestService getTestService()
?{ return new TestService(); }}
@Configuration表示該類是個(gè)配置類,@Bean表示該方法返回一個(gè) Bean。這樣就把TestService作為 Bean 讓 Spring 去管理了,在其他地方,我們?nèi)绻枰褂迷?Bean,和原來(lái)一樣,直接使用@Resource注解注入進(jìn)來(lái)即可使用,非常方便。@Resourceprivate TestService testService;另外,部署配置方面,原來(lái) Spring 有多個(gè) xml 和 properties配置,在 Spring Boot 中只需要個(gè) application.yml即可。
簡(jiǎn)化部署在使用 Spring 時(shí),項(xiàng)目部署時(shí)需要我們?cè)诜?wù)器上部署 tomcat,然后把項(xiàng)目打成 war 包扔到 tomcat里,在使用 Spring Boot 后,我們不需要在服務(wù)器上去部署 tomcat,因?yàn)?Spring Boot 內(nèi)嵌了 tomcat,我們只需要將項(xiàng)目打成 jar 包,使用 java -jar xxx.jar一鍵式啟動(dòng)項(xiàng)目。另外,也降低對(duì)運(yùn)行環(huán)境的基本要求,環(huán)境變量中有JDK即可。簡(jiǎn)化監(jiān)控我們可以引入 spring-boot-start-actuator 依賴,直接使用 REST 方式來(lái)獲取進(jìn)程的運(yùn)行期性能參數(shù),從而達(dá)到監(jiān)控的目的,比較方便。
但是 Spring Boot 只是個(gè)微框架,沒(méi)有提供相應(yīng)的服務(wù)發(fā)現(xiàn)與注冊(cè)的配套功能,沒(méi)有外圍監(jiān)控集成方案,沒(méi)有外圍安全管理方案,所以在微服務(wù)架構(gòu)中,還需要 Spring Cloud 來(lái)配合一起使用。從未來(lái)發(fā)展的趨勢(shì)來(lái)看微服務(wù)是未來(lái)發(fā)展的趨勢(shì),項(xiàng)目會(huì)從傳統(tǒng)架構(gòu)慢慢轉(zhuǎn)向微服務(wù)架構(gòu),因?yàn)槲⒎?wù)可以使不同的團(tuán)隊(duì)專注于更小范圍的工作職責(zé)、使用獨(dú)立的技術(shù)、更安全更頻繁地部署。而 繼承了 Spring 的優(yōu)良特性,與 Spring 一脈相承,而且 支持各種REST API 的實(shí)現(xiàn)方式。Spring Boot 也是官方大力推薦的技術(shù),可以看出,Spring Boot 是未來(lái)發(fā)展的一個(gè)大趨勢(shì)