Spring Boot 是由 Pivotal 團(tuán)隊(duì)提供的基于 Spring 的全新框架,旨在簡化 Spring 應(yīng)用的初始搭建和開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置。
Spring 官網(wǎng)給的定義是:Spring Boot 是所有基于 Spring 開發(fā)項(xiàng)目的起點(diǎn)。Spring Boot 集成了絕大部分目前流行的開發(fā)框架,就像 Maven 集成了所有的 JAR 包一樣,Spring Boot 集成了幾乎所有的框架,使得開發(fā)者能快速搭建 Spring 項(xiàng)目。
Spring Boot 的核心設(shè)計(jì)思想是“約定優(yōu)于配置”?;谶@一設(shè)計(jì)原則,Spring Boot 極大地簡化了項(xiàng)目和框架的配置。比如在使用 Spring 開發(fā) Web 項(xiàng)目時(shí),我們需要配置 web.xml、Spring 和 MyBatis 等,還需要將它們集成在一起。而使用 Spring Boot 一切將變得極其簡單,它采用了大量的默認(rèn)配置來簡化這些文件的配置過程,只需引入對應(yīng)的 Starters(啟動(dòng)器)。
Spring Boot 可以構(gòu)建一切。設(shè)計(jì)它就是為了使用最少的配置,以最快的速度來啟動(dòng)和運(yùn)行 Spring 項(xiàng)目。
Spring Boot的背景
多年來,隨著 Spring 的飛速發(fā)展,新功能不斷增加,Spring 變得越來越復(fù)雜。
通過訪問 Spring 官網(wǎng)就可以看到 Spring 的所有子項(xiàng)目和組件框架,如此多的子項(xiàng)目和組件使得 Spring 逐漸笨重起來,這顯然已經(jīng)無法適應(yīng)云計(jì)算和微服務(wù)時(shí)代的發(fā)展趨勢。
于是 Spring Boot 應(yīng)運(yùn)而生。Spring Boot 建立在 Spring 基礎(chǔ)之上,遵循“約定優(yōu)于配置”的原則,避免了創(chuàng)建項(xiàng)目或框架時(shí)必須做的繁雜配置,幫助開發(fā)者以最少的工作量,更加簡單、方便地使用現(xiàn)有 Spring 中的所有功能組件。
Spring Boot的特性
Spring Boot 的一系列特性使得微服務(wù)架構(gòu)的落地變得非常容易,對于目前眾多的技術(shù)棧,Spring Boot 是 Java 領(lǐng)域微服務(wù)架構(gòu)的最優(yōu)落地技術(shù)。
下圖所示為 Spring Boot 的一些特性:
圖 1 Sprint Boot 的特性
Spring Boot的核心組件
Spring Boot 官方提供了很多當(dāng)前流行的基礎(chǔ)功能組件的封裝,命名一般以 spring-boot-starter 開頭,比如 spring-boot-starter-quartz 定時(shí)任務(wù)組件和 spring-boot-starter-thymeleaf 頁面模板引擎等。
另外,由于 Spring Boot 的流行,很多第三方中間件也按照 Spring Boot 的規(guī)范提供了針對 Spring Boot 項(xiàng)目的 Starters(啟動(dòng)器),一般以組件名開頭,比如 MyBatis 針對 Spring Boot 提供的組件包 mybatis-spring-boot-starter。
Spring Boot 的核心組件如下圖所示:
圖 2 Spring Boot的核心組件
Spring Boot的優(yōu)點(diǎn)
Spring Boot 繼承了 Spring 一貫的優(yōu)點(diǎn)和特性,同時(shí)增加了一些新功能和新特性,這讓 Spring Boot 非常容易上手,也讓編程變得更加簡單。
總結(jié)起來Spring Boot有如下幾個(gè)優(yōu)點(diǎn):
- 遵循“約定優(yōu)于配置”的原則,使用 Spring Boot 只需要很少的配置或使用默認(rèn)的配置。
- 使用 JavaConfig,避免使用 XML 的煩瑣。
- 提供 Starters(啟動(dòng)器),簡化 Maven 配置,避免依賴沖突。
- 提供內(nèi)嵌 Servlet 容器,可選擇內(nèi)嵌 Tomcat、Jetty 等容器,不需要單獨(dú)的 Web 服務(wù)器。這意味著不再需要啟動(dòng) Tomcat 或其他任何中間件。
- 提供了一系列項(xiàng)目中常見的非功能特性,如安全監(jiān)控、應(yīng)用監(jiān)控、健康檢測等。
- 與云計(jì)算、微服務(wù)的天然集成。
從軟件發(fā)展的角度來講,越簡單的開發(fā)模式越流行,越有活力,其可以讓開發(fā)者將精力集中在業(yè)務(wù)邏輯本身,提高軟件開發(fā)效率。Spring Boot 就是盡可能地簡化應(yīng)用開發(fā)的門檻,讓應(yīng)用開發(fā)、測試、部署變得更加簡單。
為什么學(xué)習(xí)Spring Boot
最近幾年,Spring 生態(tài)圈最流行的技術(shù)框架莫過于 Spring Boot 和 Spring Cloud。目前,各個(gè)企業(yè)都在推動(dòng)微服務(wù)技術(shù)架構(gòu)的落地,將一個(gè)復(fù)雜的應(yīng)用拆分成多個(gè)小的獨(dú)立模塊,分開部署,互不干擾,從而達(dá)到松散耦合、提高開發(fā)效率和降低運(yùn)維成本的目的。
Spring Boot 作為微服務(wù)框架的基礎(chǔ)被越來越多地應(yīng)用于企業(yè)級開發(fā)中,它是 Spring Cloud 的基礎(chǔ)。要學(xué)習(xí) Spring Cloud,就必須了解 Spring Boot 框架的架構(gòu)和設(shè)計(jì)理念。
Spring Boot 是 Spring 生態(tài)下的一個(gè)子項(xiàng)目,用于快速、敏捷地開發(fā)新一代基于 Spring 框架的應(yīng)用程序。同時(shí),它將目前各種比較成熟的服務(wù)框架和第三方組件組合起來(如 Redis、MongoDB、JPA、RabbitMQ、Quartz 等),按照“約定優(yōu)于配置”的設(shè)計(jì)思想封裝成 Starters 組件。這樣,我們在 Spring Boot 應(yīng)用中幾乎可以零配置地使用這些組件,達(dá)到開箱即用的效果,從而從繁雜的配置中解放出來,更加專注于業(yè)務(wù)邏輯的開發(fā)。
Spring Boot 的優(yōu)點(diǎn)可以概括為以下幾個(gè)方面:
- 快速構(gòu)建:使用 Spring Initializr 可以快速創(chuàng)建項(xiàng)目,同時(shí)提供了豐富的解決方案,便于快速集成各種解決方案,提升開發(fā)效率。
- 簡化依賴:提供豐富的 Starters,簡化 Maven 配置,避免版本兼容問題。
- 一鍵部署:內(nèi)嵌 Servlet 容器,如 Tomcat、Jetty,能夠直接打包成可執(zhí)行 JAR 文件獨(dú)立運(yùn)行,支持 Jenkins、Docker,輕松實(shí)現(xiàn)自動(dòng)化運(yùn)維。
- 應(yīng)用監(jiān)控:自帶 Actuator 監(jiān)控組件,輕松監(jiān)控服務(wù)的各項(xiàng)狀態(tài)。使用 Spring Boot Admin 可以輕松部署功能完善的應(yīng)用監(jiān)控系統(tǒng)。
總的來說,Spring Boot 讓構(gòu)建、編碼、配置、部署、監(jiān)控都變得非常簡單。Spring Boot 可以說是近年來 Spring 社區(qū)乃至整個(gè) Java 社區(qū)非常有影響力的項(xiàng)目之一。
初次學(xué)習(xí) Spring Boot 的讀者,千萬不要把它想得太復(fù)雜。Spring Boot 不是新的語言、新的技術(shù),它只是把現(xiàn)有的比較流行的框架集成在一起,遵循“約定優(yōu)于配置”的原則,開箱即用,使得我們不需要再去關(guān)注那些煩瑣的配置。有了這個(gè)概念之后,就可以帶著輕松的心情去學(xué)習(xí) Spring Boot。
什么是“約定優(yōu)于配置”
我們知道 Spring Boot 的核心設(shè)計(jì)思想是“約定優(yōu)于配置”,Spring Boot 提供的所有 Starters 都是遵循這一思想實(shí)現(xiàn)的。那么,究竟什么是“約定優(yōu)于配置”呢?
“約定優(yōu)于配置”也被稱作“按約定編程”,是一種軟件設(shè)計(jì)范式,旨在減少軟件開發(fā)者需要的配置項(xiàng),這樣既能使軟件保持簡單而又不失靈活性。
從本質(zhì)上來說,系統(tǒng)、類庫或框架應(yīng)該約定合理的默認(rèn)值,開發(fā)者僅需規(guī)定應(yīng)用中不符合約定的部分。例如,如果模型中有一個(gè)名為 Product 的類,那么數(shù)據(jù)庫中對應(yīng)的表就會(huì)默認(rèn)命名為 product,只有在偏離這個(gè)約定時(shí)才需要定義有關(guān)這個(gè)名字的配置,例如將該表命名為 product_info。
簡單來說“約定優(yōu)于配置”就是遵循約定。如果你所用工具的約定配置符合你的要求,那么就可以省去此配置;不符合,就通過修改相關(guān)的配置來達(dá)到你所期待的方式。
“約定優(yōu)于配置”不是新的概念,許多框架使用了“約定優(yōu)于配置”的設(shè)計(jì)范式,包括 Maven、Spring、Grails、Grok、Apache Wicket 等。
Spring Boot 是 Spring 對“約定優(yōu)于配置”的最佳實(shí)踐產(chǎn)物。小到配置文件、中間件的默認(rèn)配置,大到內(nèi)置容器、Spring 生態(tài)中的各種 Starters,無不遵循“約定優(yōu)于配置”的設(shè)計(jì)思想。正是因?yàn)楹喕呐渲煤捅姸嗟?Starters,才讓 Spring Boot 變得簡單、易用、容易上手,也正是“約定優(yōu)于配置”的設(shè)計(jì)思想的徹底落地,才讓 Spring Boot 走向輝煌。
Spring、Spring Boot和Spring Cloud的關(guān)系
隨著 Spring、Spring Boot 和 Spring Cloud 的不斷發(fā)展,越來越多的開發(fā)者加入 Spring 的大軍中。對于初學(xué)者而言,可能不太了解 Spring、Spring Boot 和 Spring Cloud 這些概念以及它們之間的關(guān)系,下面我們一起來捋一捋。
Spring 是一個(gè)開源生態(tài)體系,是集大成者。其核心是控制反轉(zhuǎn)(Inversion of Control,IoC)和面向切面編程(Aspect Oriented Programming,AOP)。正是 IoC 和 AOP 這兩個(gè)核心功能成就了強(qiáng)大的 Spring,Spring 在這兩大核心功能上不斷地發(fā)展壯大,才有了 Spring MVC 等一系列成熟的產(chǎn)品,最終構(gòu)建了功能強(qiáng)大的 Spring 生態(tài)帝國。
Spring Boot 是在 Spring 的基礎(chǔ)上發(fā)展而來的,它不是為了取代 Spring,而是為了簡化 Spring 應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試、部署,讓開發(fā)者更容易地使用 Spring。它將目前各種比較成熟的服務(wù)框架和第三方組件組合起來,按照“約定優(yōu)于配置”的設(shè)計(jì)思想進(jìn)行重新封裝,屏蔽掉復(fù)雜的配置和實(shí)現(xiàn),最終給開發(fā)者提供一套簡單、易用、易部署、易維護(hù)的分布式系統(tǒng)開發(fā)工具包。
Spring Cloud 是基于 Spring Boot 實(shí)現(xiàn)的分布式微服務(wù)框架,它利用 Spring Boot 簡單、易用、便利的特性簡化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)、服務(wù)注冊、配置中心、消息總線、負(fù)載均衡、斷路器、數(shù)據(jù)監(jiān)控等基礎(chǔ)組件都可以用 Spring Boot 的開發(fā)風(fēng)格做到一鍵啟動(dòng)和部署。
我們都知道,采用微服務(wù)架構(gòu),服務(wù)的數(shù)量會(huì)非常多,管理特別麻煩,而 Spring Cloud 就是一套分布式微服務(wù)治理框架,可以說是這些微服務(wù)的大管家。作為大管家 Spring Cloud 就需要提供各種組件和方案來治理與維護(hù)整個(gè)微服務(wù)系統(tǒng),比如服務(wù)之間的通信、熔斷、監(jiān)控等。Spring Cloud 利用 Spring Boot 的特性集成了開源行業(yè)中優(yōu)秀的組件,在微服務(wù)架構(gòu)中對外提供了一套服務(wù)治理的解決方案。
Spring Boot 在 Spring Cloud 中起到了承上啟下的作用,如果要學(xué)習(xí) Spring Cloud,則必須學(xué)習(xí) Spring Boot。三者之間的關(guān)系如下圖所示。
圖 3 Spring、Spring Boot和Spring Cloud的關(guān)系
我們可以這樣理解:正是由于 IoC 和 AOP 這兩個(gè)強(qiáng)大的功能才有了強(qiáng)大的 Spring;Spring 生態(tài)不斷地發(fā)展才有了 Spring Boot;Spring Boot 開發(fā)、部署的簡化,使得 Spring Cloud 微服務(wù)治理方案徹底落地。