Spring Boot是一個(gè)真正的游戲改變者,它的受歡迎程度現(xiàn)在不斷增加。讓我們看看Spring Boot到底是什么?Spring Boot是一個(gè)構(gòu)建在Spring框架頂部的項(xiàng)目。它提供了一種更簡單、更快捷的方法來設(shè)置、配置和運(yùn)行簡單和基于Web的應(yīng)用程序。
在過去Spring框架中,我們需要為應(yīng)用配置所有的內(nèi)容,會(huì)有許多配置文件,例如XML或元注釋,這是Spring Boot解決的主要問題之一,基本無需XML配置了,都使用@注釋。
Spring boot巧妙地根據(jù)我們選擇的依賴配置,可以自動(dòng)啟動(dòng)我們想要的所有功能,并且只需單擊一下即可啟動(dòng)應(yīng)用程序。此外,它還簡化了應(yīng)用程序的部署過程。
初次使用Spring Boot可能讓你感覺似乎發(fā)生了什么許多“神奇”的事情。
Spring Boot組件
Spring Boot自動(dòng)配置: Spring啟動(dòng)能夠檢測某些框架的可用性,例如Spring Data
JPA,Spring Batch,Hibernate和JDBC。一旦檢測到框架,它將自動(dòng)配置它。
Spring Boot Core:是其他Spring模型的基礎(chǔ)。它提供了某些功能,可以通過驗(yàn)證自行完成。
Spring Boot Starters:幫助啟動(dòng)項(xiàng)目,它會(huì)自動(dòng)添加啟動(dòng)項(xiàng)目和依賴項(xiàng)。
Spring Boot特點(diǎn)
- 用來實(shí)現(xiàn)微服務(wù);
- 自動(dòng)配置
- 自定義配置
- 模塊化
- 獨(dú)立打包 直接運(yùn)行
- 內(nèi)嵌服務(wù)器
- Spring cloud的基礎(chǔ)
實(shí)現(xiàn)微服務(wù)
微服務(wù)是一種細(xì)小粒度的服務(wù),可直接通過端口對外提供服務(wù),Spring Boot提供REST風(fēng)格API暴露微服務(wù),與客戶端交換采取JSON數(shù)據(jù)格式。
自動(dòng)配置
Spring Boot的最佳功能之一是它根據(jù)您的依賴關(guān)系自動(dòng)配置您的應(yīng)用程序。它不僅智能,活躍,而且具有上下文智能,并記錄您的要求。我們以數(shù)據(jù)庫功能為例。如果你向pom.xml添加了一個(gè)需求,它與數(shù)據(jù)庫有某種關(guān)系,那么Spring引導(dǎo)本身假定你想要使用數(shù)據(jù)庫,因此它允許你的應(yīng)用程序隨時(shí)使用該數(shù)據(jù)庫。
只要在pom.xml增加相應(yīng)依賴就等同于加入相應(yīng)的組件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
上面配置說明這個(gè)應(yīng)用啟動(dòng)了pring-boot-starter-web的功能,也就是能提供REST端點(diǎn)暴露,讓客戶端通過/xxx/xx這樣形式URL訪問內(nèi)部服務(wù)和資源。
Spring專門提供了https://start.spring.io/讓你選擇一個(gè)SpringBoot需要的組件。Idea等開發(fā)工具提供了自動(dòng)導(dǎo)航服務(wù)。
創(chuàng)建一個(gè)SpringBoot的微服務(wù)應(yīng)用,只要在應(yīng)用入口類上標(biāo)注@SpringBootApplication:
@SpringBootApplication = @EnableAutoConfiguration + @Configuration + @ComponentScan.
- @EnableAutoConfiguration: Spring Boot會(huì)根據(jù)添加的maven的pom.xml的依賴項(xiàng)自動(dòng)配置加載相應(yīng)的依賴組件,它能智能感知上下文。
- @Configuration表示當(dāng)前類是一個(gè)配置工廠,可生產(chǎn)當(dāng)前項(xiàng)目所需的各種Bean實(shí)例,類似于XML中的<bean id=xxx name=xxxx>。如果你想為當(dāng)前項(xiàng)目導(dǎo)入其他組件,除了配置pom.xml以外,還可以在這里用代碼使用工廠模式創(chuàng)建,類的方法上使用@Bean標(biāo)注,也可用函數(shù)式方式創(chuàng)建,性能更好。
- @ComponentScan是用于自動(dòng)掃描包,如果不明確聲明,只使用@SpringBootApplication,那么就掃描當(dāng)前所在的包和子包。
自定義配置
Spring Boot除了提供入口函數(shù)以外,還提供配置,有兩種形式:application.properties和application.yaml,后一種格式在Docker和K8s容器編排中比較常用。比如上面啟動(dòng)了JPA,那么可以在applciation.properties中配置JPA的配置:
spring.datasource.url=jdbc:MySQL://localhost:3306/temp spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect spring.jpa.hibernate.ddl-auto=update
這就具體指明了JPA實(shí)現(xiàn)使用Hibernate,具體數(shù)據(jù)庫時(shí)MySQL。
Spring Cloud中各個(gè)組件的配置基本都是在這里實(shí)現(xiàn),基本無需寫任何代碼就可以實(shí)現(xiàn)服務(wù)網(wǎng)關(guān)、服務(wù)發(fā)現(xiàn)和負(fù)載平衡以及斷路器功能。
模塊化
一般情況下,一個(gè)SpringBoot應(yīng)用 = 一個(gè)微服務(wù) = 一個(gè)模塊 = 一個(gè)有邊界的上下文,如果有多個(gè)模塊,我們就開發(fā)多個(gè)微服務(wù),多個(gè)SpringBoot應(yīng)用,然后使用Springcloud實(shí)現(xiàn)它們之間動(dòng)態(tài)訪問和監(jiān)控。 但是有時(shí)我們也會(huì)希望將多個(gè)模塊放入一個(gè)SpringBoot應(yīng)用中,這樣模塊之間調(diào)用可以在一個(gè)JVM內(nèi)進(jìn)行,適合小型系統(tǒng)的部署,隨著規(guī)模擴(kuò)大,我們還可將這些模塊變成一個(gè)個(gè)微服務(wù),以SpringBoot應(yīng)用分布式運(yùn)行。
其實(shí)就是解釋@Configuration + @EnableAutoConfiguration + @ComponentScan 三個(gè)注釋:
使用Spring Boot實(shí)現(xiàn)模塊化
獨(dú)立打包
Spring Boot允許您設(shè)計(jì)獨(dú)立的,生產(chǎn)級質(zhì)量的應(yīng)用程序,您可以在任何網(wǎng)站上運(yùn)行而不會(huì)浪費(fèi)時(shí)間。您可能認(rèn)為運(yùn)行JAVA應(yīng)用程序非常簡單容易。你需要做的就是給出一個(gè)運(yùn)行命令,一切都開始發(fā)生你所想到的。老實(shí)說,這不是真的!要運(yùn)行java應(yīng)用程序,過去需要執(zhí)行以下步驟:
- 打包你的應(yīng)用
- 選擇要運(yùn)行應(yīng)用程序的Web服務(wù)器類型并下載它
- 配置該Web服務(wù)器
- 組織部署過程
但是,如果您使用Spring Boot技術(shù)來運(yùn)行應(yīng)用程序,則只需執(zhí)行以下兩個(gè)步驟:
- 打包你的申請
- 使用一些簡單的命令運(yùn)行它,例如java -jar my-application.jar
這有多簡單啊!Spring Boot通過簡單地為您的應(yīng)用程序配置和部署嵌入式Web服務(wù)器來滿足您的其余需求。
Spring的主入口類是以@SpringBootApplication標(biāo)注.
@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
同時(shí)這個(gè)類也是Java的main類,SpringBoot打成Jar包是一種胖jar,兼容標(biāo)準(zhǔn)的Jar包,它的 MANIFEST.MF格式如下:
Main-Class: org.springframework.boot.loader.JarLauncher Start-Class: com.mycompany.project.MyApplication
也可以打包成可執(zhí)行的war 包,MANIFEST.MF格式如下:
Main-Class: org.springframework.boot.loader.WarLauncher Start-Class: com.mycompany.project.MyApplication
內(nèi)嵌服務(wù)器
SpringBoot內(nèi)嵌默認(rèn)是Tomcat,還有Jetty等其他服務(wù)器可以選擇,tomcat配置不像過去那樣我們可以直接配置,需要通過SpringBoot去配置和調(diào)度。過去的模式是:先啟動(dòng)服務(wù)器,再啟動(dòng)war應(yīng)用,服務(wù)就啟動(dòng)了;現(xiàn)在的模式是直接啟動(dòng)服務(wù)就可以使用了。一個(gè)tomcat服務(wù)器=一個(gè)微服務(wù)。
Spring cloud的基礎(chǔ)
Spring cloud是實(shí)現(xiàn)分布式微服務(wù)的組件,它的基礎(chǔ)就是一個(gè)個(gè)Spring Boot微服務(wù),比如服務(wù)發(fā)現(xiàn)就是一個(gè)嵌入了Eureka組件的Spring Boot,而服務(wù)網(wǎng)關(guān)則是嵌入了Zuul組件的Spring Boot,別問是如何嵌入這些組件的,在上面自動(dòng)配置有講述。
Spring Boot與Spring MVC與Spring的區(qū)別
許多對Spring Boot知之甚少的人在使用和部署這三種Spring技術(shù)時(shí)都會(huì)感到困惑。因此,了解它們的使用時(shí)間和地點(diǎn)變得極為重要。
- Spring框架:Spring Framework 的作用是提供一種依賴,也稱為控制反轉(zhuǎn)(IOC)。當(dāng)適當(dāng)使用IOC時(shí),它有助于開發(fā)易于測試和使用的松散耦合應(yīng)用程序。
- Spring MVC:它提供了一種設(shè)計(jì)Web應(yīng)用程序的分離方式。通過View Resolver,Dispatcher Servlet和ModelAndView 等簡單概念,開發(fā)人員可以開發(fā)應(yīng)用程序而不會(huì)消耗太多時(shí)間。
- Spring Boot:Spring Boot通過自動(dòng)配置數(shù)據(jù)源進(jìn)行智能工作。它還可以處理啟動(dòng)項(xiàng)目,從而無需編寫注釋,樣板代碼和XML配置,從而提高了工作效率并減少了開發(fā)人員的工作量。