相信很多人都使用過(guò)或者聽(tīng)到過(guò)SpringBoot,那SpringBoot到底是什么,它是不是微服務(wù),和SpringCloud是什么關(guān)系呢?
請(qǐng)往下看:
1、SpringBoot是什么?
從本質(zhì)上來(lái)說(shuō),springboot是一個(gè)專(zhuān)注于框架的框架。Spring Boot就是對(duì)各種框架的整合,讓他們集成在一起更加簡(jiǎn)單,簡(jiǎn)化了我們?cè)诩蛇^(guò)程中的模板化配置,它做了那些沒(méi)有它你自己也會(huì)去做的Spring Bean配置。
SpringBoot是一個(gè)框架,一種全新的編程規(guī)范,他的產(chǎn)生簡(jiǎn)化了框架的使用,所謂簡(jiǎn)化是指簡(jiǎn)化了Spring眾多框架中所需的大量且繁瑣的配置文件,所以 SpringBoot是一個(gè)服務(wù)于框架的框架,服務(wù)范圍是簡(jiǎn)化配置文件。
2、SpringBoot的誕生
- SpringBoot是伴隨著Spring4.0誕生的;
- 從字面理解,Boot是引導(dǎo)的意思,因此SpringBoot幫助開(kāi)發(fā)者快速搭建Spring框架;
- SpringBoot幫助開(kāi)發(fā)者快速啟動(dòng)一個(gè)Web容器;
- SpringBoot繼承了原有Spring框架的優(yōu)秀基因;
- SpringBoot簡(jiǎn)化了使用Spring的過(guò)程。
3、SpringBoot可以做什么?
最明顯的特點(diǎn)是,讓文件配置變的相當(dāng)簡(jiǎn)單、讓?xiě)?yīng)用部署變的簡(jiǎn)單(SpringBoot內(nèi)置服務(wù)器,并裝備啟動(dòng)類(lèi)代碼),可以快速開(kāi)啟一個(gè)Web容器進(jìn)行開(kāi)發(fā)。
你不用再寫(xiě)這些樣板配置了,可以專(zhuān)注于應(yīng)用程序的邏輯,這些才是應(yīng)用程序獨(dú)一無(wú)二的東西。
4、SpringBoot所具備的特征有:
(1)獨(dú)立運(yùn)行
Spring Boot而且內(nèi)嵌了各種servlet容器,Tomcat、Jetty等,現(xiàn)在不再需要打成war包部署到容器中,Spring Boot只要打成一個(gè)可執(zhí)行的jar包就能獨(dú)立運(yùn)行,所有的依賴(lài)包都在一個(gè)jar包內(nèi)。
(2)簡(jiǎn)化配置
spring-boot-starter-web啟動(dòng)器自動(dòng)依賴(lài)其他組件,簡(jiǎn)少了maven的配置。
(3)自動(dòng)配置
Spring Boot能根據(jù)當(dāng)前類(lèi)路徑下的類(lèi)、jar包來(lái)自動(dòng)配置bean,如添加一個(gè)spring-boot-starter-web啟動(dòng)器就能擁有web的功能,無(wú)需其他配置。
(4)無(wú)代碼生成和XML配置
Spring Boot配置過(guò)程中無(wú)代碼生成,也無(wú)需XML配置文件就能完成所有配置工作,這一切都是借助于條件注解完成的,這也是Spring4.x的核心功能之一。
Spring Boot沒(méi)有引入任何形式的代碼生成,而是利用了Spring 4的條件化配置特性,以及Maven和Gradle提供的傳遞依賴(lài)解析,以此實(shí)現(xiàn)Spring應(yīng)用程序上下文里的自動(dòng)配置。
(5)應(yīng)用監(jiān)控
Spring Boot提供一系列端點(diǎn)可以監(jiān)控服務(wù)及應(yīng)用,做健康檢測(cè)。
5、幫助我們解決了哪些問(wèn)題
1) Spring Boot使編碼變簡(jiǎn)單
聲明一個(gè)依賴(lài)+實(shí)現(xiàn)一個(gè)方法 即可正常運(yùn)行
2) Spring Boot使配置變簡(jiǎn)單
Spring由于其繁瑣的配置,一度被人認(rèn)為“配置地獄”,各種XML、Annotation配置,讓人眼花繚亂,而且如果出錯(cuò)了也很難找出原因。
Spring Boot更多的是采用Java Config的方式,對(duì)Spring進(jìn)行配置。
3) Spring Boot使部署變簡(jiǎn)單
一鍵啟動(dòng),java -jar XXXX.jar 不需要解壓,并且不需要部署Tomcat等應(yīng)用服務(wù)器,你需要的只有一個(gè)JDK
4) Spring Boot使監(jiān)控變簡(jiǎn)單
采用spring-boot-start-actuator,直接以REST的方式,獲取進(jìn)程的運(yùn)行期性能參數(shù)。
當(dāng)然這些metrics有些是有敏感數(shù)據(jù)的,spring-boot-start-actuator為此提供了一些Basic Authentication認(rèn)證的方案,這些方案在實(shí)際應(yīng)用過(guò)程中也是不足的。
6、SpringBoot的不足
Spring Boot作為一個(gè)微框架,離微服務(wù)的實(shí)現(xiàn)還是有距離的。
沒(méi)有提供相應(yīng)的服務(wù)發(fā)現(xiàn)和注冊(cè)的配套功能,自身的acturator所提供的監(jiān)控功能,也需要與現(xiàn)有的監(jiān)控對(duì)接。沒(méi)有配套的安全管控方案,對(duì)于REST的落地,還需要自行結(jié)合實(shí)際進(jìn)行URI的規(guī)范化工作。
7、那么SpringBoot不是什么呢
因?yàn)镾pring Boot實(shí)在是太驚艷了,所以過(guò)去很多年的時(shí)間里有不少和它相關(guān)的言論。原先聽(tīng)到或看到的東西可能給你造成了一些誤解。
首先,Spring Boot不是應(yīng)用服務(wù)器。這個(gè)誤解是這樣產(chǎn)生的:Spring Boot可以把We b應(yīng)用程序變?yōu)榭勺詧?zhí)行的JAR文件,不用部署到傳統(tǒng)Java應(yīng)用服務(wù)器里就能在命令行里運(yùn)行。Spring Boot在應(yīng)用程序里嵌入了一個(gè)Servlet容器(Tomcat、Jetty或Undertow),以此實(shí)現(xiàn)這一功能。但這是內(nèi)嵌的Servlet容器提供的功能,不是Spring Boot實(shí)現(xiàn)的。
與之類(lèi)似,Spring Boot也沒(méi)有實(shí)現(xiàn)諸如JPA(JPA是Java Persistence API的簡(jiǎn)稱(chēng),中文名Java持久層API,是JDK 5.0注解或XML描述對(duì)象-關(guān)系表的映射關(guān)系,并將運(yùn)行期的實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)中。)或JMS(Java Message Service,Java消息服務(wù))之類(lèi)的企業(yè)級(jí)Java規(guī)范。它的確支持不少企業(yè)級(jí)Java規(guī)范,但是要在Spring里自動(dòng)配置支持那些特性的Bean。例如,Spring Boot沒(méi)有實(shí)現(xiàn)JPA,不過(guò)它自動(dòng)配置了某個(gè)JPA實(shí)現(xiàn)(比如Hibernate)的Bean,以此支持JPA。


