SpringBoot能夠改變開發Spring應用程序的方式:
- Spring Boot Starter:它將常用的依賴分組進行了整合,將其合併 到一個依賴中,這樣就可以一次性添加到項目的Maven或Gradle 構建中;
- Spring Boot的自動配置特性利用了Spring 4對條件化配 置的支持,合理地推測應用所需的bean並自動化配置它們;
- 自動配置:命令行接口(Command-line interface,CLI):Spring Boot的CLI發揮了Groovy編程語言的優勢,並結合自動配置進一步簡化Spring應用的開發;
- Actuator:它爲Spring Boot應用添加了一定的管理特性。
很多Starter引用了其他的Starter。大多數的Starter都會引用spring-boot-starter,它實際上是一個基礎的Starter(當然,它也依賴了logging Starter)。依賴是傳遞性的
關於自動配置
Spring Boot的Starter減少了構建中依賴列表的長度,而Spring Boot的自動配置功能則削減了Spring配置的數量。它在實現時,會考慮應用中的其他因素並推斷你所需要的Spring配置。
比如我們要將Thymeleaf模板作爲Spring MVC的視圖,至少需要三個bean:ThymeleafViewResolver、SpringTemplateEngine和TemplateResolver。但是,使用Spring Boot自動配置的話,我們需要做的僅僅是將Thymeleaf添加到項目的類路徑中。如果Spring Boot探測到Thymeleaf位於類路徑中,它就會推斷我們需要使用Thymeleaf實現Spring MVC的視圖功能,並自動配置這些bean。Spring Boot Starter也會觸發自動配置。
例如,在Spring Boot應用中,如果我們想要使用Spring MVC的話,所需要做的僅僅是將Web Starter作爲依賴放到構建之中。將Web Starter作爲依賴放到構建中以後,它會自動添加Spring MVC依賴。如果Spring Boot的Web自動配置探測到Spring MVC位於類路徑下,它將會自動配置支持Spring MVC的多個bean,包括視圖解析器、資源處理器以及消息轉換器(等等)。我們接下來需要做的就是編寫處理請求的控制器(Controller)。
通過Actuator獲取瞭解應用內部狀況
Spring Boot Actuator所完成的主要功能就是爲基於Spring Boot的應用添加多個有用的管理端點。這些端點包括以下幾個內容。
- GET /autoconfig:描述了Spring Boot在使用自動配置的時候,所做出的決策;
- GET /beans:列出運行應用所配置的bean;
- GET /configprops:列出應用中能夠用來配置bean的所有屬性及其當前的值;
- GET /dump:列出應用的線程,包括每個線程的棧跟蹤信息;
- GET /env:列出應用上下文中所有可用的環境和系統屬性變量;
- GET /env/{name}:展現某個特定環境變量和屬性變量的值;
- GET /health:展現當前應用的健康狀況;
- GET /info:展現應用特定的信息;
- GET /metrics:列出應用相關的指標,包括請求特定端點的運行次數;
- GET /metrics/{name}:展現應用特定指標項的指標狀況;
- POST /shutdown:強制關閉應用;
- GET /trace:列出應用最近請求相關的元數據,包括請求和響應頭。
爲了啓用Actuator,我們只需將Actuator Starter依賴添加到項目中即可。
項目中加入以下依賴(有多種寫法,都會依賴引入下面的兩個jar包)便引入了spring-boot框架。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>1.5.13.RELEASE</version>
<scope>compile</scope>
<!--代表不引用傳遞-->
<optional>true</optional>
</dependency>
會引入兩個依賴包(也會引入spring底層的東西):
org.springframework.boot:spring-boot
這個類庫提供了springboot的一些特性
- 如SpringApplication類,提供了一個方便的靜態方法去創建一個標準的Spring項目,它唯一的任務是創建和更新Spring的ApplicationContext
- 內嵌web容器的選擇
- 一流的外部配置支持
- 方便的ApplicationContext初始化配置,包括一個默認且懂事的log配置
org.springframework.boot:spring-boot-autoconfigure
是我們常用的一些功能的自動配置類,比如說mail發短信,mq消息隊列自動配置,Aop自動配置等,代替了我們諸多的xml文件,自動推斷生效。
org.springframework.boot:spring-boot-start-項目名
一般官方starter這裏面是不包含代碼的,只有一個pom文件,依賴傳遞導入以來的相關的功能依賴jar包,結合spring-boot-autoconfigure的代碼用於自動配置。
舉例來講項目中寫上
compile('org.springframework.boot:spring-boot-starter-aop')
會根據依賴傳遞引入
org.springframework.boot:spring-boot-starter
org.springframework:spring-aop
org.aspectj:aspectjweaver
當然用IDEA的話,列表中也會出現
org.springframework.boot:spring-boot-starter-aop
但是打開後發現下面僅僅是一個描述文件,什麼也沒有,官方的這個包的代碼也僅有一個Pom文件
自己寫的框架starter可以有多種寫法,但是原則不變。
需要有項目框架源碼+自動配置發現類+pom文件(打包成一個starter)+讓人使用
一般的非官方starter的artifactId是:
原框架artifactId-spring-boot-starter
依賴引入的時候使用方
compile('groupId:框架artifactId-spring-boot-starter:0.2.63')
所以說有四種寫法去定義starter,①②分別代表不同的項目
寫法一:如druid
①原項目源碼
②自動發現配置類+打包的pom文件
寫法二:網上搜索自定義starter都是這樣的實現
①項目源碼+自動發現配置類+打包的pom文件
寫法三:有點類似於Spring的寫法,但是不完全相同
①項目源碼+自動發現配置類
②僅有一個pom文件,用來描述依賴關係,進行打包,像Spring一樣
寫法四:Spring的官方實現方法,對比三來講拆分的更加徹底
①原項目源碼(org.springframework.data:spring-data-redis,io.lettuce:lettuce-core,以及Spring的底層jar等等)
②自動發現配置類(org.springframework.boot:spring-boot-starter底層又引入了org.springframework.boot:spring-boot-autoconfigure)
③打包的pom文件(描述依賴關係,需要引入項目依賴源碼+自動配置發現類)