內(nèi)容簡(jiǎn)介:本文介紹 Spring Boot 的配置文件和配置管理,以及介紹了三種讀取配置文件的方式,并進(jìn)行代碼演示。
在 Spring Boot 出現(xiàn)之前,一個(gè) Spring 項(xiàng)目普遍會(huì)存在很多個(gè)配置文件,例如有配置與 web 服務(wù)器相關(guān)信息的 web.xml,有配置 Spring 本身的各種 application-xxx.xml,一份 xxx 對(duì)應(yīng) Sping 的一個(gè)功能模塊,例如 MVC 和 Data Source,還有第三方插件 如 log4j 等配置文件。此外,應(yīng)用程序本身也可能存在多個(gè)配置文件,剛?cè)?shù)這些配置文件的數(shù)目都讓人感覺暈?zāi)X袋,更別說去管理和配置它們了。
Spring Boot 技術(shù)的到來,大大地簡(jiǎn)化了這些配置文件的管理和讀取。對(duì)于 Spring.配置信息,它所支持的第三方框架的配置信息,應(yīng)用自定義的配置信息,通通都整合了在一個(gè)application.properties 文件中,過去可能存在近10個(gè)的配置文件,如今只需要一個(gè)即可。不用再像以前那樣,配置信息散落在應(yīng)用的不同配置文件。這顯然大大的簡(jiǎn)化了配置信息的管理工作,當(dāng)然也相應(yīng)地減少了出錯(cuò)的概率。
1、Web 服務(wù)器的配置
Spring Boot 啟動(dòng)的默認(rèn) web 服務(wù)器是 Tomcat,而端口為 8080,上下文是“/”。對(duì)于這些默認(rèn)設(shè)置,我們都可以在 appication.properties 中重新配置。
我們現(xiàn)在在? appication.properties 中添加兩行代碼
server.port=9090
server.servlet.context-path=/home

【圖1? 設(shè)置服務(wù)器屬性】
按快捷鍵 Shift + F10 運(yùn)行程序,輸入原先的 網(wǎng)址 http://localhost:8080/hello,發(fā)現(xiàn)找不到服務(wù)器。原因是我們已經(jīng)利用上面兩行代碼修改的 Tomcat 的端口號(hào)和應(yīng)用的上下文。我們輸入以下網(wǎng)址就可以看到結(jié)果了。
http://localhost:9090/home/hello

【圖2 Hello, Spring Boot】
2、用 Undertow 替換默認(rèn)的 Tomcat 服務(wù)器
Spring Boot 默認(rèn)內(nèi)置的 web 服務(wù)器是 Tomcat。事實(shí)上,它支持三種嵌套的 web 服務(wù)器,另外兩種是 Jetty 和 Undertow,而 Undertow 性能最優(yōu),可以將它設(shè)置為 web 服務(wù)器,取代另外兩種。
Spring Boot 的 spring-boot-starter-web 默認(rèn)嵌套了 Tomcat。當(dāng)我們更換為其它 web 服務(wù)器時(shí),如更換為 Undertow,需要把 Tomcat 給屏蔽掉。同時(shí),還需要引進(jìn)相應(yīng) web 服務(wù)器對(duì)應(yīng)的 starter。
現(xiàn)在我們嘗試把 web 服務(wù)器切換為 Undertow,像下面那樣修改 pom.xml

【圖3 配置 Undertow 】
網(wǎng)上所查到的切換 web 服務(wù)器方案大多如上,但是在 IDEA 中編譯運(yùn)行程序,它總是
頑固地使用 Tomcat,而不啟用 Undertow。這時(shí)候有足夠理由懷疑這是 IDEA 的緩存問題所造成的,需要像下面這樣刷新一下 IDEA 的 Maven 項(xiàng)目。

【圖4 IDEA 刷新 Maven 項(xiàng)目】
刷新 Maven 項(xiàng)目后,然后再使用 Maven 來編譯一下程序,像下圖那樣雙擊 install。

【圖5 Maven Install 】
編譯完之后,按快捷鍵 Shift + F10 運(yùn)行程序,此時(shí)可以看見日志輸出顯示 Undertow 已經(jīng)成功啟動(dòng)了。

【圖6 Undertow 成功啟動(dòng)】
3、讀取 Spring Boot 的配置
可以在應(yīng)用中讀取 application.properties 的配置文件,并獲取其中配置信息,以供應(yīng)用程序使用。事實(shí)上 Spring Boot 提供了三種方式來讀取配置文件。
第 1 種方法是通過 Environment 類 的 getPropery() 方法讀取。
第 2 種方法是通過 @Value 注解來自動(dòng)注入屬性值。
第 3 種方法是將一組屬性自動(dòng)注入到一個(gè)配置類中。
我們先在 application.properties 中加入如下四行配置,然后分別用三種方法來讀取。
app.message1=Hi, Felix!
app.message2=You are really an IT expert.
app.num1=4
app.num2=5
現(xiàn)在修改 HelloWorld 的 sayHello 方法,使用 @Value 注解的方法讀取 app.message1,用? Enviornment.getProperty() 讀取 app.message2,用 @Autowired 把Environment 注入進(jìn)來,就可以調(diào)用它的 getProperty() 方法了。代碼如下:

【圖7 Environment & @Value】
啟動(dòng)程序后,成功用兩種方式讀出配置文件的數(shù)據(jù),在瀏覽器的輸出結(jié)果如下:

【圖8 Felix IT Expert】
第 3 種讀取配置文件的方法是將一組屬性自動(dòng)注入到一個(gè)配置類中,這時(shí)需要借助注解 @ConfigurationProperties 和 @Configuration,我們用這種方式讀取 app.num1 和 app.num2 的值,并對(duì)它們求和,然后輸出結(jié)果。還是上代碼。

【圖9 ConfigurationProperties 】
AppConfig 類使用了兩個(gè)注解 @ConfigurationProperties 和 @Configuration,在 @ConfigurationProperties 中輸入了參數(shù) “app”,它是屬性 app.num1 和 app.num2 的前綴,從以下代碼可以看出 AppConfig 就是一個(gè)普通的 POJO 文件,只不過是加上了注解。
接下來再看如何使用 AppConfig 這個(gè)類。現(xiàn)在我們新建一個(gè)求和的控制器 SumController,使用注解 @Autowired 把 AppConfig 自動(dòng)注入進(jìn)來,就可以使用了,是不是很方便、很簡(jiǎn)單。

【圖10 求和控制器】
按 Shift + F10 啟動(dòng)程序,輸入 Sum 方法對(duì)應(yīng)的 url http://localhost:9090/home/sum,即可看到結(jié)果。

【圖11 求和結(jié)果】
好了,飛仙時(shí)空寫的第三篇 Spring Boot 到此結(jié)束,歡迎轉(zhuǎn)發(fā)和關(guān)注。
Enjoy coding.