Spring Boot 基礎(chǔ)( 二 ) 配置文件的獲取及@Value庄呈、@ConfigurationProperties的區(qū)別和應(yīng)用

我們在開發(fā)過程中,難免會有些自定義的配置文件需要與程序交互派阱,在程序中獲取配置文件
常用的獲取方式:

  • 自定義工具類PropertyUtil诬留,并在該類的static靜態(tài)代碼塊中讀取properties文件內(nèi)容保存在static屬性中以供別的程序使用
/**
*自定義工具類PropertyUtil,并在該類的static靜態(tài)代碼塊中讀取properties文件內(nèi)容保存在static屬性中以供別的程序使用
*/
public class PropertyUtil {
    private static final Logger logger = LoggerFactory.getLogger(PropertyUtil.class);
    private static Properties props;
    static{
        loadProps();
    }

    synchronized static private void loadProps(){
        logger.info("開始加載properties文件內(nèi)容.......");
        props = new Properties();
        InputStream in = null;
        try {
       /**第一種贫母,通過類加載器進(jìn)行獲取properties文件流*/
            in = PropertyUtil.class.getClassLoader().getResourceAsStream("application.properties");
        /**第二種文兑,通過類進(jìn)行獲取properties文件流*/
            //in = PropertyUtil.class.getResourceAsStream("/jdbc.properties");
            props.load(in);
        } catch (FileNotFoundException e) {
            logger.error("jdbc.properties文件未找到");
        } catch (IOException e) {
            logger.error("出現(xiàn)IOException");
        } finally {
            try {
                if(null != in) {
                    in.close();
                }
            } catch (IOException e) {
                logger.error("jdbc.properties文件流關(guān)閉出現(xiàn)異常");
            }
        }
        logger.info("加載properties文件內(nèi)容完成...........");
        logger.info("properties文件內(nèi)容:" + props);
    }

    public static String getProperty(String key){
        if(null == props) {
            loadProps();
        }
        return props.getProperty(key);
    }

    public static String getProperty(String key, String defaultValue) {
        if(null == props) {
            loadProps();
        }
        return props.getProperty(key, defaultValue);
    }
}
  • 使用@Value獲取靈活方便
public class Person {

    @Value("person.userName")
    private String userName;
    @Value("person.age")
    private String age;
    @Value("person.isWoman")
    private boolean isWoman;
    
    public String toString() {
        return "Person{" +
                "userName='" + userName + '\'' +
                ", age='" + age + '\'' +
                ", isWoman=" + isWoman +
                '}';
    }
}
  • 使用SpringBoot的@ConfigurationProperties自動獲取

    pom.xml配置

    <!--導(dǎo)入配置文件處理器,配置文件進(jìn)行綁定就會有提示-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
    

    java:

    
    @Component
    @ConfigurationProperties(prefix = "person")
    //開啟JSR303
    @Validated
    public class Person {
    
        @Email  //該注解表示配置值必須為email格式不然會報相應(yīng)異常
        private String userName;
        private String age;
        private boolean isWoman;
        private Map pet;
        private List<Person>  friends;
    
        public String toString() {
            return "Person{" +
                    "userName='" + userName + '\'' +
                    ", age='" + age + '\'' +
                    ", isWoman=" + isWoman +
                    ", pet=" + pet +
                    ", friends=" + friends +
                    '}';
        }
    }
    

@ConfigurationProperties@Value比較

@ConfigurationProperties @Value
功能 批量注入配置文件中的屬性 一個個指定
松散綁定(松散語法) 支持 不支持
SpEL 不支持 支持
JSR303數(shù)據(jù)校驗(yàn) 支持 不支持
復(fù)雜類型封裝 支持
  • 無論配置文件是yml還是properties他們都能獲取到值腺劣;
  • 如果說绿贞,我們只是在某個業(yè)務(wù)邏輯中需要臨時獲取一下配置文件中的某項(xiàng)值,使用@Value橘原;
  • 如果說籍铁,我們專門編寫了一個javaBean來和大量配置文件或者含有復(fù)雜數(shù)據(jù)類型的配置進(jìn)行映射,我們就直接使用@ConfigurationProperties趾断;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拒名,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子芋酌,更是在濱河造成了極大的恐慌增显,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脐帝,死亡現(xiàn)場離奇詭異同云,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)堵腹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門炸站,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疚顷,你說我怎么就攤上這事旱易。” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵咒唆,是天一觀的道長。 經(jīng)常有香客問我释液,道長全释,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任误债,我火速辦了婚禮浸船,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寝蹈。我一直安慰自己李命,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布箫老。 她就那樣靜靜地躺著封字,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耍鬓。 梳的紋絲不亂的頭發(fā)上阔籽,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音牲蜀,去河邊找鬼笆制。 笑死,一個胖子當(dāng)著我的面吹牛涣达,可吹牛的內(nèi)容都是我干的在辆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼度苔,長吁一口氣:“原來是場噩夢啊……” “哼匆篓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起林螃,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奕删,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疗认,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體完残,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年横漏,在試婚紗的時候發(fā)現(xiàn)自己被綠了谨设。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡缎浇,死狀恐怖扎拣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤二蓝,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布誉券,位于F島的核電站,受9級特大地震影響刊愚,放射性物質(zhì)發(fā)生泄漏踊跟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一鸥诽、第九天 我趴在偏房一處隱蔽的房頂上張望商玫。 院中可真熱鬧,春花似錦牡借、人聲如沸拳昌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炬藤。三九已至,卻和暖如春碴里,著一層夾襖步出監(jiān)牢的瞬間刻像,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工并闲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留细睡,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓帝火,卻偏偏與公主長得像溜徙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子犀填,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蠢壹,服務(wù)發(fā)現(xiàn),斷路器九巡,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 配置文件解析(下) 原創(chuàng)者:文思 一图贸、yml(YAML Ain’t Markup Language)基本用法...
    文思li閱讀 1,985評論 0 2
  • spring boot 配置文件: 格式一: application.properties 例如:添加全局訪問路徑...
    inke閱讀 517評論 0 1
  • 入門 介紹 Spring Boot Spring Boot 使您可以輕松地創(chuàng)建獨(dú)立的、生產(chǎn)級的基于 Spring ...
    Hsinwong閱讀 16,891評論 2 89
  • 今天是大年初一,舒心攜全家在這里我給您拜年啦撒汉!祝您新年快樂沟优、身體健康、萬事如意睬辐、財源廣進(jìn)…… 這幾天挠阁,這樣式的微信...
    舒心_80cc閱讀 2,161評論 1 5