SpringBoot使用yml配置文件

1. @Value("${變量名稱(chēng)}")

使用@Value("${變量名稱(chēng)}")是最簡(jiǎn)單的一種形式
代碼中直接通過(guò)該方式引用即可

public class MicroGatewayConfig {
    @Value("${config}")
    private String config;
}

這種方式簡(jiǎn)單粗暴府适,但是不推薦使用汉规,

缺點(diǎn)很多
  1. idea也給我們報(bào)黃色的警告诊沪。而且我們不能再配置文件中按住“ctrl”鼠標(biāo)點(diǎn)擊配置變量直接跳到程序中秦躯。如果我們的項(xiàng)目中使用大量這樣的變量郑叠,將會(huì)是災(zāi)難。
  2. 最致命的問(wèn)題是程序中變量獲取到的值只能是字符串产禾,不能支持?jǐn)?shù)字排作,布爾類(lèi)型。
  3. 使用這種形式亚情,變量的值只會(huì)在SpringBoot啟動(dòng)的時(shí)候賦值一次妄痪,以后不會(huì)改變,如果我們使用了配置中心楞件,隨后衫生,我們即使更新了配置中心中配置信息的值,程序也不會(huì)同步土浸,除非我們重啟項(xiàng)目罪针,配置中心就顯得比較尷尬。


2.1 配置類(lèi)

@Setter
@Getter
@Component
@ConfigurationProperties("spring.cloud.gateway.custom")
public class MicroGatewayConfig {
    /**
     * config demo
     */
    private String config;
}

@ConfigurationProperties注解內(nèi)容填寫(xiě)的是這個(gè)配置變量的前綴
這樣配置信息就以類(lèi)的形成呈現(xiàn)出來(lái)黄伊,如果我們需要使用配置信息泪酱,直接通過(guò)@Resource注入即可。在配置文件中还最,也不會(huì)報(bào)警告墓阀,在編寫(xiě)配置信息的時(shí)候,強(qiáng)大的idea也會(huì)幫我們聯(lián)想拓轻。

2.2 配置類(lèi)嵌套

當(dāng)我們的配置信息越來(lái)越多時(shí)岂津,需要針對(duì)不同的配置進(jìn)行分類(lèi),如果全部編寫(xiě)在同一個(gè)配置類(lèi)中悦即,那么這個(gè)配置類(lèi)會(huì)顯得十分臃腫吮成。
springBoot支持配置類(lèi)嵌套的形式。

舉個(gè)例子
我現(xiàn)在網(wǎng)關(guān)通過(guò)配置文件中的“開(kāi)關(guān)”決定是否對(duì)請(qǐng)求信息進(jìn)行緩存辜梳。
這樣粱甫,我們可以將關(guān)于請(qǐng)求緩存相關(guān)的配置信息單獨(dú)一個(gè)類(lèi)進(jìn)行保存。

  1. 緩存配置類(lèi)
@Data
@Component
@ConfigurationProperties("spring.cloud.gateway.custom.cache-request")
public class CacheRequestConfig {
    /**
     * 是否緩存body信息
     */
    private Boolean body = false;
    /**
     * 是否緩存表單信息
     */
    private Boolean formData = false;
    /**
     * 是否緩存encodeBody信息
     */
    private Boolean encodeFormData = false;
}
  1. 主配置類(lèi)
@Setter
@Getter
@Component
@ConfigurationProperties("spring.cloud.gateway.custom")
public class MicroGatewayConfig {
    private CacheRequestConfig cacheRequest;
}
  1. 配置文件


    image.png

    我們?cè)诰帉?xiě)配置類(lèi)的時(shí)候作瞄,可以發(fā)現(xiàn)一個(gè)有趣的事情茶宵,就是針對(duì)于布爾類(lèi)型,我們除了使用true/false外宗挥,還可以使用on/off進(jìn)行代替乌庶,在程序中springBoot會(huì)自動(dòng)替我們轉(zhuǎn)換成true/false种蝶。這樣增強(qiáng)了配置的可讀性。

2.3 List配置信息

我們?cè)谂渲眯畔⒅杏袝r(shí)候可能需要配置一個(gè)list瞒大,比如配置redis的集群ip信息螃征。之前我們可以使用一個(gè)字符串代替,每個(gè)ip中間使用特定的符號(hào)隔開(kāi)透敌,然后在程序中自己手動(dòng)的去分隔盯滚。

強(qiáng)大的yml支持List,表達(dá)形式是每個(gè)元素前面使用“-”+空格
eg:
配置一個(gè)redis集群列表

  1. 配置類(lèi)
@Data
@Component
@ConfigurationProperties("spring.cloud.gateway.custom")
public class MicroGatewayConfig {

    private CacheRequestConfig cacheRequest;

    private List<String> redisClusterPortList;
}
  1. 配置信息
spring:
  cloud:
    gateway:
      custom:
        cache-request:
          body: true
          form-data: true
          encode-form-data: on
        redisClusterHostList:
          - 192.168.1.1
          - 196.168.1.0

2.3 Map配置信息

yml使用map的格式為:

map變量名
  key: value
  key: value

map適用于未知的鍵值對(duì)酗电,聽(tīng)起來(lái)可能有點(diǎn)奇怪魄藕,舉個(gè)例子,加入我們想編寫(xiě)一個(gè)header校驗(yàn)器撵术,但是我們校驗(yàn)的內(nèi)容需要具體的場(chǎng)景來(lái)定義背率,但是校驗(yàn)的規(guī)則已經(jīng)制定好了,這里說(shuō)一下我指定的校驗(yàn)規(guī)則嫩与。key 即為header的key,value為header的value退渗,如果value的值可以是多個(gè)值中的任意一個(gè),那么用“|”隔開(kāi)蕴纳,如果header的值可以為任意,但是不能為空个粱,那么value的值不寫(xiě)即可古毛。

eg:
這里有三個(gè)header的值,分別是version,固定值為:1.0.0都许,platform是ios或者android都可以稻薇,diviceNo為任意值。那么具體的配置如下:

header:
  version: 1.0.0
  platform: iso|android
  diviceNo:  

進(jìn)階用法:

1. 為配置添加候選值

需求:
假設(shè)我這里有性別這個(gè)配置胶征,候選值分別為man和woman

候選值依賴(lài)于枚舉實(shí)現(xiàn)塞椎,我們需要編寫(xiě)一個(gè)枚舉類(lèi)

public enum Sex {
    man,
    woman
}

配置類(lèi)

@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserConfiguration {
    /**
     * 用戶(hù)性別
     */
    private Sex sex;
}

2.為配置添加默認(rèn)值

還是上面的例子,如果我們配置用戶(hù)性別睛低,默認(rèn)是man案狠,我們只需要在配置類(lèi)寫(xiě)默認(rèn)值即可

@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserConfiguration {
    /**
     * 用戶(hù)性別,默認(rèn)man
     */
    private Sex sex = Sex.man;
}

3. map的高階用法

用過(guò)feign的朋友都知道钱雷,feign可以針對(duì)每個(gè)服務(wù)進(jìn)行配置骂铁,而且配置的時(shí)候還有提示信息,如下:

feign:
  client:
    config:
      default:
        connectTimeout: 1000
        readTimeout: 1000
      user-servce: 
        connectTimeout: 5000
        readTimeout: 5000
      order-service:
        connectTimeout: 3000
        readTimeout: 3000

feign配置文件部分代碼如下:

@ConfigurationProperties("feign.client")
public class FeignClientProperties {

    private boolean defaultToProperties = true;

    private String defaultConfig = "default";

    private Map<String, FeignClientConfiguration> config = new HashMap<>();

可以看出他存儲(chǔ)配置類(lèi)的方式是采用map罩抗,我們的服務(wù)名即為map的key拉庵,配置信息即為map的value

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市套蒂,隨后出現(xiàn)的幾起案子钞支,更是在濱河造成了極大的恐慌茫蛹,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烁挟,死亡現(xiàn)場(chǎng)離奇詭異婴洼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)信夫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)窃蹋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人静稻,你說(shuō)我怎么就攤上這事警没。” “怎么了振湾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵杀迹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我押搪,道長(zhǎng)树酪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任大州,我火速辦了婚禮续语,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厦画。我一直安慰自己疮茄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布根暑。 她就那樣靜靜地躺著力试,像睡著了一般。 火紅的嫁衣襯著肌膚如雪排嫌。 梳的紋絲不亂的頭發(fā)上畸裳,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音淳地,去河邊找鬼怖糊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛颇象,可吹牛的內(nèi)容都是我干的蓬抄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼夯到,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嚷缭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤阅爽,失蹤者是張志新(化名)和其女友劉穎路幸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體付翁,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡简肴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了百侧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砰识。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖佣渴,靈堂內(nèi)的尸體忽然破棺而出辫狼,到底是詐尸還是另有隱情,我是刑警寧澤辛润,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布膨处,位于F島的核電站,受9級(jí)特大地震影響砂竖,放射性物質(zhì)發(fā)生泄漏真椿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一乎澄、第九天 我趴在偏房一處隱蔽的房頂上張望突硝。 院中可真熱鬧,春花似錦置济、人聲如沸解恰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至查库,卻和暖如春路媚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背樊销。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工整慎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人围苫。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓裤园,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親剂府。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拧揽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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