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