springboot | 讀取配置文件

Spring Boot中讀取配置文件有以下五種方式:

  1. 使用 @Value 讀取配置文件
  2. 使用 @ConfigurationProperties 讀取配置文件
  3. 使用 Environment 讀取配置文件
  4. 使用 @PropertySource 讀取配置文件
  5. 使用原生方式讀取配置文件

它們的具體使用方法如下磕昼,為了方便測(cè)試千所,我們?cè)?Spring Boot 配置文件 application.properties 添加以下內(nèi)容:

profile.name=Spring 
profile.desc=Spring Desc.
1. @Value

使用 @Value 可以讀取單個(gè)配置項(xiàng)咏花,如下代碼所示:

@SpringBootApplication
public class DemoApplication implements InitializingBean {
    @Value("${profile.name}")
    private String name;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("My Profile Name:" + name);
    }
}
2. @ConfigurationProperties

@ConfigurationProperties 和 @Value 的使用略微不同亚铁,@Value 是讀取單個(gè)配置項(xiàng)的,而 @ConfigurationProperties 是讀取一組配置項(xiàng)的纽乱,我們可以使用 @ConfigurationProperties 加實(shí)體類讀取一組配置項(xiàng)间雀,如下代碼所示:

@Component
@ConfigurationProperties(prefix = "profile")
@Data
public class Profile {
    private String name;
    private String desc;
}

其中 prefix 表示讀取一組配置項(xiàng)的根 name群发,相當(dāng)于 Java 中的類名,最后再把此配置類链瓦,注入到某一個(gè)類中就可以使用了拆魏,如下代碼所示:

@SpringBootApplication
public class DemoApplication implements InitializingBean {
    @Autowired
    private Profile profile;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Profile Object:" + profile);
    }
}
3. 使用 Environment 讀取配置文件

Environment 是 Spring Core 中的一個(gè)用于讀取配置文件的類,將此類使用 @Autowired 注入到類中就可以使用它的 getProperty 方法來獲取某個(gè)配置項(xiàng)的值了慈俯,如下代碼所示:

@SpringBootApplication
public class DemoApplication implements InitializingBean {

    @Autowired
    private Environment environment;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Profile Name:" + environment.getProperty("profile.name"));
    }
}
4. 使用 @PropertySource 讀取配置文件

使用 @PropertySource 注解可以用來指定讀取某個(gè)配置文件渤刃,比如指定讀取 application.properties 配置文件的配置內(nèi)容,具體實(shí)現(xiàn)代碼如下:

@SpringBootApplication
@PropertySource("classpath:application.properties")
public class DemoApplication implements InitializingBean {
    @Value("${profile.name}")
    private String name;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Name:" + name);
    }
}

注意點(diǎn):

  • 中文亂碼
    如果配置文件中出現(xiàn)中文亂碼的情況贴膘,可通過指定編碼格式的方式來解決中文亂碼的問題卖子,具體實(shí)現(xiàn)如下:
@PropertySource(value = "dev.properties", encoding = "utf-8")
  • 注意事宜
    @PropertySource 注解默認(rèn)是只支持 properties 格式配置文件的讀取的
5. 使用原生方式讀取配置文件

我們還可以使用最原始的方式 Properties 對(duì)象來讀取配置文件,如下代碼所示:

@SpringBootApplication
public class DemoApplication implements InitializingBean {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Properties props = new Properties();
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(
                    this.getClass().getClassLoader().getResourceAsStream("application.properties"),
                    StandardCharsets.UTF_8);
            props.load(inputStreamReader);
        } catch (IOException e1) {
            System.out.println(e1);
        }
        System.out.println("Properties Name:" + props.getProperty("profile.name"));
    }
}
總結(jié)

其中最常用的是前 3 種刑峡,如果讀取某一個(gè)配置項(xiàng)可使用 @Value洋闽,如果讀取一組配置項(xiàng)可使用 @ConfigurationProperties,如果要指定讀取某一個(gè)具體的配置文件可使用 @PropertySource 來指定

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氛琢,一起剝皮案震驚了整個(gè)濱河市喊递,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阳似,老刑警劉巖骚勘,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異撮奏,居然都是意外死亡俏讹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門畜吊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泽疆,“玉大人,你說我怎么就攤上這事玲献⊙程郏” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵捌年,是天一觀的道長(zhǎng)瓢娜。 經(jīng)常有香客問我,道長(zhǎng)礼预,這世上最難降的妖魔是什么眠砾? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮托酸,結(jié)果婚禮上褒颈,老公的妹妹穿的比我還像新娘柒巫。我一直安慰自己,他們只是感情好谷丸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布堡掏。 她就那樣靜靜地躺著,像睡著了一般淤井。 火紅的嫁衣襯著肌膚如雪布疼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天币狠,我揣著相機(jī)與錄音游两,去河邊找鬼。 笑死漩绵,一個(gè)胖子當(dāng)著我的面吹牛贱案,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播止吐,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼宝踪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了碍扔?” 一聲冷哼從身側(cè)響起瘩燥,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎不同,沒想到半個(gè)月后厉膀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡二拐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年服鹅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片百新。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡企软,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饭望,到底是詐尸還是另有隱情仗哨,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布铅辞,位于F島的核電站厌漂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巷挥。R本人自食惡果不足惜桩卵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一验靡、第九天 我趴在偏房一處隱蔽的房頂上張望倍宾。 院中可真熱鬧雏节,春花似錦、人聲如沸高职。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怔锌。三九已至寥粹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埃元,已是汗流浹背涝涤。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岛杀,地道東北人阔拳。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像类嗤,于是被迫代替她去往敵國和親糊肠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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