亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring技巧之如何動態(tài)讀取配置文件

 更新時間:2021年09月14日 11:33:52   作者:夫禮者  
這篇文章主要介紹了Spring技巧之如何動態(tài)讀取配置文件的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring 動態(tài)讀取配置文件

需求背景

最近碰到的需求大概是這樣,我們要在一個現(xiàn)有的項目基礎(chǔ)上進行二次開發(fā),但又不愿意碰原有項目里的代碼。所以采用了Maven依賴的方式——新建一個Maven項目作為主要開發(fā)環(huán)境,將原有項目作為Maven依賴(war形式)引入進來。這樣在新建的擴展項目中打包出來的war將會是合并兩個項目的所有代碼。

而在實際搭建的過程中碰到這樣一個問題,Spring配置文件中的 <context:property-placeholder />只允許存在一個, 而且這個機會已經(jīng)被原有項目使用了——這種說法并不嚴(yán)謹(jǐn),所以以下給出三種解決方案:

方案一

以上關(guān)于<context:property-placeholder />的說法并不嚴(yán)謹(jǐn),其實多次添加也不會報錯; 但只會有一個生效(含義是 如果spring從所設(shè)置的配置文件集合中沒有讀取到屬性去替換占位符,就會報錯, 除非設(shè)置 ignore-unresolvable ) ,如果按照如下設(shè)置方式,就可以避免這種情況,并接觸本次需求。

<!-- 如果要配置多個, 就要設(shè)置ignore-unresolvable ="true" -->
<context:property-placeholder location="classpath:extend/db.properties" ignore-unresolvable="true" />
<context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true" />

但是這樣帶來的壞處就是:

1. 將發(fā)現(xiàn)錯誤的時機推遲到了運行時,這在系統(tǒng)比較龐大時實在是大忌。

2. 屬性重復(fù)時的替換危機,這種BUG想要找出來,耗費的時間和精力想想就不寒而栗。

方案二

第二個方法 就是BeanFactoryPostProcessor接口,注意該接口的回調(diào)時機早于占位符替換 操作。

// BeanFactoryPostProcessor.postProcessBeanFactory
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    // 我們自己去讀取指定的配置文件
    Properties prop = null ;
    try {
        prop = PropertiesLoaderUtils.loadAllProperties("extend/db.properties", Thread.currentThread().getContextClassLoader());
    } catch (IOException e) {
        e.printStackTrace();
    }
    if(null == prop){
        return;
    }
    // 注入到特定的Bean的特定屬性中
    BeanDefinition beanDefinition = beanFactory.getBeanDefinition("dataSource_extend");
    beanDefinition.getPropertyValues().add("url", prop.getProperty("db.sd.url"));
    beanDefinition.getPropertyValues().add("driverClassName",prop.getProperty("db.sd.driverClassName"));
    beanDefinition.getPropertyValues().add("username", prop.getProperty("db.sd.username"));
    beanDefinition.getPropertyValues().add("password", prop.getProperty("db.sd.password"));   
    super.postProcessBeanFactory(beanFactory);
}

方案三

還有一種方法就是使用Spring的父子容器的關(guān)系,將這個 <context:property-placeholder/>和依賴它的Bean全部注冊到一個全新容器中,然后將該容器作為現(xiàn)有容器的Parent。此方法過去取巧,本人沒有實際去嘗試。

動態(tài)讀取配置文件中的信息

1、首先是寫一個配置文件,方便動態(tài)加載

jedis.properties

key-value形式保存

1、利用類加載器等讀取配置文件

1.讀取配置文件

InputStream is=JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");

2.創(chuàng)建properties對象

Properteis pro=new Properties();

3.關(guān)聯(lián)文件

pro.load(is);

4.然后在項目中可以動態(tài)加載key獲取到value值

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java線程安全與非線程安全解析

    Java線程安全與非線程安全解析

    這篇文章主要介紹了Java線程安全與非線程安全解析,涉及非線程安全現(xiàn)象模擬以及線程安全的實現(xiàn)等相關(guān)內(nèi)容,需要的朋友可以參考,一起交流學(xué)習(xí)。
    2017-10-10
  • mysql數(shù)據(jù)庫忘記密碼時如何修改

    mysql數(shù)據(jù)庫忘記密碼時如何修改

    本文主要介紹了mysql數(shù)據(jù)庫忘記密碼時如何修改的步驟方法,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Java?源碼重讀系列之?HashMap

    Java?源碼重讀系列之?HashMap

    這篇文章主要為大家介紹了Java源碼重讀系列之HashMap示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • IntelliJ IDEA 2017 漢化包及圖文教程

    IntelliJ IDEA 2017 漢化包及圖文教程

    這篇文章主要介紹了IntelliJ IDEA 2017 漢化包及圖文教程,文中給大家提供兩種方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-03-03
  • Spring security實現(xiàn)權(quán)限管理示例

    Spring security實現(xiàn)權(quán)限管理示例

    這篇文章主要介紹了Spring security實現(xiàn)權(quán)限管理示例,這里整理了詳細(xì)的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • 詳解SpringBoot 使用Spring Initializr 快速構(gòu)建工程(官方推薦)

    詳解SpringBoot 使用Spring Initializr 快速構(gòu)建工程(官方推薦)

    本篇文章主要介紹了SpringBoot 使用Spring Initializr 快速構(gòu)建工程(官方推薦),非常具有實用價值,需要的朋友可以參考下
    2017-10-10
  • springboot 事件監(jiān)聽的實現(xiàn)方法

    springboot 事件監(jiān)聽的實現(xiàn)方法

    這篇文章主要介紹了springboot 事件監(jiān)聽的實現(xiàn)方法,并詳細(xì)的介紹了四種監(jiān)聽方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • SpringBoot原理之自動配置機制詳解

    SpringBoot原理之自動配置機制詳解

    Springboot遵循“約定優(yōu)于配置”的原則,使用注解對一些常規(guī)的配置項做默認(rèn)配置,減少或不使用xml配置,讓你的項目快速運行起來,下面這篇文章主要給大家介紹了關(guān)于SpringBoot原理之自動配置機制的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Eclipse 導(dǎo)出可執(zhí)行Java工程/可執(zhí)行Jar文件(包含第三方Jar包)

    Eclipse 導(dǎo)出可執(zhí)行Java工程/可執(zhí)行Jar文件(包含第三方Jar包)

    這篇文章主要介紹了Eclipse 導(dǎo)出可執(zhí)行Java工程/可執(zhí)行Jar文件(包含第三方Jar包)的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Spring和SpringBoot比較及區(qū)別解惑

    Spring和SpringBoot比較及區(qū)別解惑

    這篇文章主要介紹了Spring和SpringBoot比較解惑區(qū)別,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06

最新評論