SpringBoot詳解系列文章:
SpringBoot詳解(一)-快速入門
SpringBoot詳解(二)-Spring Boot的核心
SpringBoot詳解(三)-Spring Boot的web開發(fā)
SpringBoot詳解(四)-優(yōu)雅地處理日志
Spring Boot的核心
在上篇中我們成功運行了一個簡單的web應(yīng)用,其中有一個注解被輕易的帶過了,但它在Spring Boot中是最重要的注解,沒有之一,它就是@SpringBootApplication,本篇將對它與Spring Boot的配置進行深入的介紹。
1、@SpringBootApplication
前面已經(jīng)說過了,一般Spring Boot的Web應(yīng)用都有一個xxxApplication類,并使用@SpringBootApplication注解標(biāo)記,作為該web應(yīng)用的加載入口。那這個@SpringBootApplication注解到底是何方神圣?通過查看它的源碼,可以發(fā)現(xiàn)它是一個組合注解:
@SpringBootApplication這個Spring Boot核心注解是由其它三個重要的注解組合,分別是: @SpringBootConfiguration 、 @EnableAutoConfiguration 和 @ComponentScan。
1)@SpringBootConfiguration
@SpringBootConfiguration是Spring Boot項目的配置注解,這也是一個組合注解。
通過上圖代碼,結(jié)合前面所講的知識,不難猜測出@SpringBootConfiguration與@Configuration存在著某種關(guān)系,可以認為@SpringBootConfiguration就相當(dāng)于@Configuration,在Spring Boot項目中推薦使用@SpringBootConfiguration替代@Configuration,不過因為注釋長度問題,往往@Configuration較為常用。
2)@EnableAutoConfiguration
@EnableAutoConfiguration注解用于啟用自動配置,該注解會使Spring Boot根據(jù)項目中依賴的jar包自動配置項目的配置項。
例如:上篇中,我們在編寫第一個WEB應(yīng)用時,就在pom.xml中引入了spring-boot-starter-web的依賴,所以項目中就會引入SpringMVC的依賴,就會自動配置tomcat和SpringMVC。
還有后面使用事務(wù)時,會引入spring-boot-starter-jdbc的依賴,讓Spring Boot自動配置DataSourceTransactionManager或JpaTransactionManager,等等。。
3)@ComponentScan
@ComponentScan是組件掃描注解,不配置默認掃描@SpringBootApplication所在類的同級目錄以及它的子目錄(這很重要,后面很應(yīng)用到這個特性)。當(dāng)然你也可以自己指定要掃描的包目錄,例如:
@ComponentScan(basePackages = "com.lqr.demo1")
2、取消部分自動配置
上面說了,Spring Boot根據(jù)項目中依賴的jar包自動配置項目的配置項,而Spring Boot支持的自動配置非常之多,如下圖所示(只是其中的一部分):
當(dāng)自動配置的東西一多了,就容易出問題,上篇中最后出現(xiàn)的"Cannot determine embedded database driver class for database type NONE"錯誤,就是因為springboot啟動時會自動注入數(shù)據(jù)源和配置jpa,所以我們就需要取消Spring Boot的部分自動配置。至于取消自動配置的方式也相當(dāng)簡單,就是對@SpringBootApplication注解的exclude進行賦值即可,如:
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
@Controller
public class HelloApplication {
...
}
其他的取消自動配置以此類推。
3、自定義Banner
這個知識點其實對開發(fā)意義不太,但不妨了解下(可以裝個逼~~)。在Spring Boot項目啟動時,控制臺會輸出一個"spring>>>"的banner文字圖案,如:
這個banner是可以自定義的,自定義的方法很簡單:只需要把想輸出的文字保存在banner.txt文件中,然后把這個banner.txt放到resources目錄下即可:
運行項目,然后控制臺就可以輸出banner.txt中的文字了。
Text to ASCII Art Generator (TAAG)這個網(wǎng)站可以得到文字圖案。
4、Starter pom
Spring Boot為我們提供了簡化企業(yè)級開發(fā)絕大多數(shù)場景的start pom(類似于組件),只要使用了對應(yīng)的starter pom,Spring Boot就會為我們提供自動配置的Bean。
這里官方給出的starter,以下是"好心人"對這些Starter pom做的翻譯:
怎么使用?直接在pom.xml中引入依賴即可(不懂請參考上篇中“第一個Web應(yīng)用”中pom.xml配置的第二部分,或請自行百度)。
5、使用Xml配置文件
常規(guī)開發(fā)中,java配置方式已經(jīng)可以完全取代xml配置方式了,但有時我們并不想使用java配置,而是繼續(xù)沿用之前的xml配置方式,或者出于其他原因,一定要在xml中進行配置,那該怎么辦呢,很簡單,使用@ImportResource注解即可:
@ImportResource(value = {"classpath:xxx1.xml","classpath:xxx2.xml"})
6、全局配置文件
Spring Boot項目使用一個全局的配置文件application.properties或者是application.yml,在resources目錄下或者類路徑下的/config下,一般我們放到resources下。
我們知道Spring Boot會根據(jù)在pom.xml中依賴的jar包進行自動配置,當(dāng)我們要對這些jar包對應(yīng)的框架進行配置又該怎么辦呢,沒錯,可以在全局配置文件(application.properties或者是application.yml)中進行配置,如tomcat的端口配置等。
1)全局配置文件的基本使用(application.properties)
這部分使用application.properties中的書寫方式來介紹。
①tomcat端口配置
server.port=8888
②修改Spring MVC攔截路徑規(guī)則
默認Spring MVC攔截路徑規(guī)則是/,如果要修改成*.html的話,可以在全局配置文件中進行如下設(shè)置:
server.servlet-path=*.html
③視圖解析器配置
一樣的,Spring Boot也可以通過全局配置文件對視圖解析器進行配置:
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
④日志輸出
Spring Boot對各種日志框架都做了支持,我們可以通過配置來修改默認的日志的配置:
#設(shè)置日志級別
logging.level.org.springframework=DEBUG
2)全局配置文件的進階使用(application.yml)
這部分使用application.yml中的書寫方式來介紹。
properties與yml文件在形式上有所差別,yml文件的書寫方式比較簡潔,類似eclipse中package的flag呈現(xiàn)方式(而properties文件則像Hierarchical方式)。如上面properties文件中的屬性配置使用yml文件來寫:
server:
port: 8080
context-path: /
spring:
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
logging:
level: debug
yml文件在書寫時,需要注意一個地方:冒號與值中間是存在空格的!
①自定義屬性
全局配置文件并不只是配置Spring Boot中已經(jīng)存在的屬性,我們也可以自定義屬性(別忘了,它本身就是一個properties文件),代碼需要使用@Value("${xxx}")注解來獲取這些屬性,如:
②屬性引用屬性
屬性引用屬性也簡單,使用${xxx}就可以引用配置文件中的屬性了。
lqr: 666
content: "${lqr} is six six six"
③屬性轉(zhuǎn)對象
這個就比較有看點了,以上面的"server.port: 8080"為例,我們可以認為是Server這個類中有一個port屬性,其值為8080。可以使用@ConfigurationProperties(prefix = "屬性名前綴")這個注解作為配置文件中屬性轉(zhuǎn)對象屬性的橋梁,具體如圖所示:
Spring Boot的全局配置很強大,同時它可以配置的屬性也很多,以上只列出幾個常用的屬性配置,如需查看完整的全局屬性配置,請到spring-boot官方配置文檔查看。好了,本篇到此結(jié)束,主要介紹了Spring Boot中幾個核心注解與自動配置,同時解決上篇中的幾個問題,從下篇開始,將針對Spring Boot的web開發(fā)進行介紹。