精進(jìn) Spring Boot 03:Spring Boot 的配置文件和配置管理牙甫,以及用三種方式讀取配置文件

內(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.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锄奢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子剧腻,更是在濱河造成了極大的恐慌拘央,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件书在,死亡現(xiàn)場(chǎng)離奇詭異灰伟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)儒旬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門栏账,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遏乔,“玉大人,你說我怎么就攤上這事发笔∶巳” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵了讨,是天一觀的道長(zhǎng)捻激。 經(jīng)常有香客問我,道長(zhǎng)前计,這世上最難降的妖魔是什么胞谭? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮男杈,結(jié)果婚禮上丈屹,老公的妹妹穿的比我還像新娘。我一直安慰自己伶棒,他們只是感情好旺垒,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肤无,像睡著了一般先蒋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宛渐,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天竞漾,我揣著相機(jī)與錄音,去河邊找鬼窥翩。 笑死业岁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寇蚊。 我是一名探鬼主播笔时,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼幔荒!你這毒婦竟也來了糊闽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤爹梁,失蹤者是張志新(化名)和其女友劉穎右犹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姚垃,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡念链,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掂墓。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谦纱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出君编,到底是詐尸還是另有隱情跨嘉,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布吃嘿,位于F島的核電站祠乃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏兑燥。R本人自食惡果不足惜亮瓷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望降瞳。 院中可真熱鬧嘱支,春花似錦、人聲如沸挣饥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亮靴。三九已至馍盟,卻和暖如春于置,著一層夾襖步出監(jiān)牢的瞬間茧吊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工八毯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搓侄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓话速,卻偏偏與公主長(zhǎng)得像讶踪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泊交,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容