SpringBoot 入門篇(五) SpringBoot的配置文件

一络它、SpringBoot的yml配置文件

二柄延、SpringBoot配置文件優(yōu)先級(jí)

三檬贰、Profile-specific配置文件

SpringBoot版本:1.5.13.RELEASE
對(duì)應(yīng)官方文檔鏈接:https://docs.spring.io/spring-boot/docs/1.5.13.RELEASE/reference/htmlsingle/

上一篇:SpringBoot 入門篇(四) SpringBoot外部配置以及優(yōu)先級(jí)


一徒欣、SpringBoot的yml配置文件

??SpringBoot的配置文件常用的有2種類型炼杖,.properties和.yml。默認(rèn)情況下景用,SpringBoot會(huì)加載classpath或者classpath:/config下的application.properties或者application.yml文件涵叮。

??.properties文件是我們常用的配置文件,.yml則是YAML文件,YAML是一種易閱讀割粮、易和腳本語言交互的用來表達(dá)資料序列的編程語言盾碗,這里簡(jiǎn)單說下語法
??(1)使用空格 Space 縮進(jìn)分層,同層元素左對(duì)齊舀瓢,不同層元素使用不同的空格數(shù)目縮進(jìn)(不能使用 Tab置尔,各系統(tǒng) Tab對(duì)應(yīng)的空格數(shù)目可能不同,導(dǎo)致層次混亂)氢伟;
??(2)#表示注釋榜轿;
??(3)破折號(hào)后面跟一個(gè)空格表示列表;
??(4)key和value之間用冒號(hào)和空格分隔朵锣。

environments:
    dev:
        url: http://dev.bar.com
        name: Developer Setup
    prod:
        url: http://foo.bar.com
        name: My Cool App

#yaml 的list集合
my:
   servers:
       - dev.bar.com
       - foo.bar.com

??上述代碼段是一個(gè)標(biāo)準(zhǔn)的yml文件內(nèi)容谬盐,等價(jià)于如下properties配置

environments.dev.url=http://dev.bar.com
environments.dev.name=Developer Setup
environments.prod.url=http://foo.bar.com
environments.prod.name=My Cool App

my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com

??SpringBoot通過YamlPropertiesFactoryBean 來加載application.yml文件,并通過YamlMapFactoryBean 將其轉(zhuǎn)換成Map诚些。
??我們可以通過@Value或者@ConfigurationProperties注解來獲取配置文件中的數(shù)據(jù)飞傀。例如有如下application.yml文件:

name:
    nameStr
age:
    11

#yaml 的list集合
my:
    servers:
       - dev.bar.com
       - foo.bar.com
@Configuration
public class MyConfiguration {
    // 通過@Value獲取值
    @Value("${name}")
    private String name;

    @Value("${age}")
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
@Configuration
//通過@ConfigurationProperties獲取值
@ConfigurationProperties(prefix="my")
public class MyConfig {

    private List<String> servers = new ArrayList<String>();

    public List<String> getServers() {
        return this.servers;
    }

}
@SpringBootApplication
@RestController
public class Application {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Application.class);
        application.run(args);
    }


    @Autowired
    private MyConfiguration myConfiguration;

    @RequestMapping("/getMyConfiguration")
    public String getMyConfiguration() {
        return myConfiguration.getName() + ":" + myConfiguration.getAge();
    }

    @Autowired
    private MyConfig myConfig;

    @RequestMapping("/getMyConfig")
    public List<String> getMyConfig() {
        return myConfig.getServers();
    }
}

??啟動(dòng)Application,在瀏覽器分別輸入 http://localhost:8080/getMyConfigurationhttp://localhost:8080/getMyConfig 可以得到配置的值诬烹。
??當(dāng)使用@ConfigurationProperties獲取配置值砸烦,SpringBoot還提供了一種寬松的綁定方式(@Value不支持該特性):

@ConfigurationProperties(prefix="person")
public class OwnerProperties {

    private String firstName;

    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

}

則在配置文件中使用如下任意一種方式都能獲取對(duì)應(yīng)的配置值

person.firstName
person.first-name
person.first_name
PERSON_FIRST_NAME

二、SpringBoot配置文件優(yōu)先級(jí)

??默認(rèn)情況下绞吁,SpringBoot會(huì)加載如下位置的配置文件幢痘,這些文件可以同時(shí)存在,當(dāng)這些文件中的多個(gè)存在相同的key時(shí)家破,value的優(yōu)先級(jí)從高到低分別為:
??(1)當(dāng)前應(yīng)用目錄下/config子文件夾下的application.properties或者application.yml文件颜说;
??(2)當(dāng)前應(yīng)用目錄下的application.properties或者application.yml文件;
??(3)類路徑下/config子文件夾下的application.properties或者application.yml文件汰聋;
??(4)類路徑下的application.properties或者application.yml文件门粪。
??如果想指定加載的配置文件,則可以通過在啟動(dòng)時(shí)添加命令行參數(shù)--spring.config.name或者--spring.config.location進(jìn)行指定文件烹困。

$ java -jar app.jar --spring.config.name=myproject
或者
$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

??需要注意的是玄妈,使用命令行參數(shù)指定的文件的優(yōu)先級(jí)是最高的,例如如果通過命令行指定了應(yīng)用目錄下./custom-config/和classpath:/custom-config/髓梅,則value的優(yōu)先級(jí)從高到低分別為:
??(3)當(dāng)前應(yīng)用目錄下./custom-config路徑下的application.properties或者application.yml文件拟蜻;
??(4)類路徑下子文件夾/custom-config/下的application.properties或者application.yml文件;
??(3)當(dāng)前應(yīng)用目錄下/config子文件夾下的application.properties或者application.yml文件女淑;
??(4)當(dāng)前應(yīng)用目錄下的application.properties或者application.yml文件瞭郑;
??(5)類路徑下/config子文件夾下的application.properties或者application.yml文件;
??(6)類路徑下的application.properties或者application.yml文件鸭你。


三、Profile-specific配置文件

??SpringBoot除了會(huì)加載application.properties/yml外,還會(huì)加載application-{profile}.properties/yml袱巨,其中{profile}默認(rèn)為default阁谆,也就是說,如果同時(shí)存在application.properties/yml和application-default.properties/yml愉老,SpringBoot會(huì)同時(shí)加載它們场绿,且application-default.properties/yml的優(yōu)先級(jí)更高。
??我們也可以自定義{profile}嫉入,需要注意焰盗,除了application-default.properties/yml外,application-{profile}.properties/yml文件在加載后會(huì)處于未激活狀態(tài)咒林,即其中的值無法使用熬拒,如果想使用,則需要在application.properties/yml中指定spring.profiles.active垫竞。
??例如澎粟,在工程中有如下3個(gè)文件,application-dev.yml表示開發(fā)使用的配置欢瞪,application-test.yml表示測(cè)試使用的配置活烙,application-pro.yml表示生產(chǎn)環(huán)境使用的配置,則我們通過在application.yml中指定spring.profiles.active的值為{profile}對(duì)應(yīng)的值(即dev\test\pro)遣鼓,就可以靈活的修改對(duì)應(yīng)配置啸盏,方便開發(fā)、測(cè)試和運(yùn)維的同學(xué)使用不同的配置骑祟。

spring:
    profiles:
        active:
            pro

??另外一種激活application-{profile}.properties/yml文件的方式是使用SpringApplication.setAdditionalProfiles()方法:

 public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Application.class);
        application.setAdditionalProfiles("dev");
        application.run(args);
    }

上一篇:SpringBoot 入門篇(四) SpringBoot外部配置以及優(yōu)先級(jí)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宫补,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子曾我,更是在濱河造成了極大的恐慌粉怕,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抒巢,死亡現(xiàn)場(chǎng)離奇詭異贫贝,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蛉谜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門稚晚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人型诚,你說我怎么就攤上這事客燕。” “怎么了狰贯?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵也搓,是天一觀的道長赏廓。 經(jīng)常有香客問我,道長傍妒,這世上最難降的妖魔是什么幔摸? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮颤练,結(jié)果婚禮上既忆,老公的妹妹穿的比我還像新娘。我一直安慰自己嗦玖,他們只是感情好患雇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宇挫,像睡著了一般苛吱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捞稿,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天又谋,我揣著相機(jī)與錄音,去河邊找鬼娱局。 笑死彰亥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衰齐。 我是一名探鬼主播任斋,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼耻涛!你這毒婦竟也來了废酷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤抹缕,失蹤者是張志新(化名)和其女友劉穎澈蟆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卓研,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趴俘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奏赘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寥闪。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖磨淌,靈堂內(nèi)的尸體忽然破棺而出疲憋,到底是詐尸還是另有隱情,我是刑警寧澤梁只,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布缚柳,位于F島的核電站埃脏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喂击。R本人自食惡果不足惜剂癌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一淤翔、第九天 我趴在偏房一處隱蔽的房頂上張望翰绊。 院中可真熱鬧,春花似錦旁壮、人聲如沸监嗜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裁奇。三九已至,卻和暖如春麦撵,著一層夾襖步出監(jiān)牢的瞬間刽肠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工免胃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留音五,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓羔沙,卻偏偏與公主長得像躺涝,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扼雏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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