第三篇: spring-boot中的讀取配置文件

前言

任何一個(gè)項(xiàng)目不可能少得了配置文件, 所以配置文件在spring-boot中有很多呈現(xiàn)方式湾蔓,本篇主要介紹一下最常用的配置文件的方式瘫析,代碼依附于第一篇開(kāi)發(fā)的簡(jiǎn)單Hello World的微服務(wù),并且項(xiàng)目代碼也是和第一篇的代碼在同一個(gè)項(xiàng)目之中默责。

常規(guī)配置

  1. 最常用的 key-value 形式的配置就是通過(guò) @Value 注解

假設(shè)配置文件 application.yaml里面的內(nèi)容為

key1: value1
key2: ${value2:default_value2}

然后代碼中使用了

  @Value("${key1}")
  private String key1;

  @Value("${key2}")
  private String key2;

  @Value("${key3:default_value3}")
  private String key3;

對(duì)于配置文件里面的key1表示,對(duì)應(yīng)的值是value1, 如果使用@Value("${key1}") 的時(shí)候沒(méi)有找到對(duì)應(yīng)的值程序就會(huì)拋出異常退出杖虾。

對(duì)于配置文件里面的key2表示奇适,對(duì)應(yīng)的值是default_value2, 但是可以支持通過(guò)手動(dòng)設(shè)置java啟動(dòng)參數(shù)-Dvalue2來(lái)設(shè)置value2來(lái)改變默認(rèn)值芦鳍。

對(duì)于 @Value("${key3:default_value3}") 表示試圖去找配置文件中的 key3, 如果找到了就用配置文件中的值柠衅,沒(méi)有找到的話,不會(huì)拋出異常贷祈,而是用 default_value3 替代势誊。

  1. 把配置文件轉(zhuǎn)成對(duì)象
    首先在配置類(lèi)上面使用注解
@Configuration
@EnableConfigurationProperties({
    CollectionConfig.class, QiNiuConfig.class
})

其中注解 @Configuration 表示這個(gè)類(lèi)為配置類(lèi)谣蠢,需要讀配置文件,@EnableConfigurationProperties 表示需要可以把配置文件映射成 CollectionConfigQiNiuConfig 類(lèi)的對(duì)象挤忙,是符合java的面向?qū)ο蟮乃枷氲摹?/p>

(1) 對(duì)象類(lèi)型: 下面是QiNiuConfig類(lèi)

@Validated
@ConfigurationProperties(prefix = "qiniuParam")
public class QiNiuConfig {
  @NotNull
  private String accessKey;
  @NotNull
  private String secretKey;
  private String localImageFilePath;
  private int otherParam1;
  @NotNull
  private int otherParam2;
//  @NotNull
  private Integer otherParam3;
}

對(duì)應(yīng)的配置文件

qiniuParam:
  accessKey: testAccessKey
  secretKey: testSecretKey
  localImageFilePath: /data/localUpdateFile/
  otherParam1: 11111

在spring-boot的1.5.x版本里面饭玲,加入了對(duì)于配置對(duì)象的字段進(jìn)行了驗(yàn)證的功能茄厘,我們?cè)陬?lèi)上面加上@Validated 注解次哈, 然后在字段上面增加@NotNull 表示該字段不能為空吆录,也可以增加其他注解, 進(jìn)行各種參數(shù)規(guī)則的校驗(yàn)哀卫,然后@ConfigurationProperties 注解表示前綴統(tǒng)一撬槽,可以看到我們配置文件中的對(duì)象都是屬于 qiniuParam 域之下的侄柔,所以我們加了prefix=qiniuParam,另外還有一點(diǎn)要注意移剪,@NotNull 注解薪者,在java的原生類(lèi)型的時(shí)候是不會(huì)生效的,可以看到配置文件中 otherParam2 并沒(méi)有賦值赶站,但是啟動(dòng)不會(huì)出錯(cuò)纺念,他會(huì)默認(rèn)把原生類(lèi)型 int 賦值成0, 如果把 int 改成了 Integer烙博,啟動(dòng)就會(huì)出錯(cuò)。

(2) 集合類(lèi)型
配置文件

list:
  - list_value1
  - list_value2
  - list_value3

map:
  map_key1: map_value1
  map_key2: map_value2

集合類(lèi)型不能用@Value進(jìn)行注入铺根,必須要通過(guò)類(lèi)對(duì)象進(jìn)行構(gòu)造

@Validated
@ConfigurationProperties
public class CollectionConfig {
  @NotNull
  private List<String> list;
  @NotNull
  private Map<String, String> map;
}

同樣可以增加參數(shù)驗(yàn)證注解來(lái)配合進(jìn)行驗(yàn)證乔宿。并且注意,配置文件只支持list類(lèi)型和map類(lèi)型的配置參數(shù)掂林。

(3) 其他
如果一定要利用@Value來(lái)接受list參數(shù)泻帮,可以通過(guò)利用 @Value注解的表達(dá)式函數(shù)進(jìn)行解析

@Value("#{'${list}'.split(',')}")
private List<String> list;

@Value("#{${map}}")  
private Map<String,String> map;

然后配置文件中寫(xiě)成

list: topic1,topic2,topic3
map: "{key1: 'value1', key2: 'value2'}"

ps: 注意上面的map解析中计寇,一定要用""把map所對(duì)應(yīng)的value包起來(lái),要不然解析會(huì)失敗元莫,導(dǎo)致不能轉(zhuǎn)成 Map<String,String> map; 對(duì)象蝶押。

相關(guān)代碼在

https://github.com/dragontree101/spring-boot-tutorials

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朽基,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子稼虎,更是在濱河造成了極大的恐慌霎俩,老刑警劉巖沉眶,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谎倔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捌肴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)秽五,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)饥悴,“玉大人,你說(shuō)我怎么就攤上這事起宽。” “怎么了绿映?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵叉弦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我库车,道長(zhǎng)樱拴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任珍坊,我火速辦了婚禮阵漏,結(jié)果婚禮上翻具,老公的妹妹穿的比我還像新娘。我一直安慰自己叹洲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布疹味。 她就那樣靜靜地躺著糙捺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洪灯。 梳的紋絲不亂的頭發(fā)上签钩,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天铅檩,我揣著相機(jī)與錄音,去河邊找鬼拾给。 笑死兔沃,一個(gè)胖子當(dāng)著我的面吹牛乒疏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怕吴,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疏之,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼暇咆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起其骄,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拯爽,失蹤者是張志新(化名)和其女友劉穎毯炮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體桃煎,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡三椿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年葫辐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耿战。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狈涮,死狀恐怖鹏倘,靈堂內(nèi)的尸體忽然破棺而出纤泵,到底是詐尸還是另有隱情捏题,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站同规,受9級(jí)特大地震影響券勺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜关炼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一寸潦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧命雀,春花似錦池户、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)报亩。三九已至弦追,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劲件,已是汗流浹背零远。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工厌蔽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牵辣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓奴饮,卻偏偏與公主長(zhǎng)得像纬向,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戴卜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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