亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring Boot自定義配置屬性源(PropertySource)

2024-07-14 08:41:15
字體:
來源:轉載
供稿:網友

配置覆蓋優于profile

在生產實踐中,配置覆蓋是解決不同環境不同配置的常用方法。比如用生產服務器上的配置文件覆蓋包內的文件,或者使用中心化的配置服務來覆蓋默認的業務配置。

相比于profile機制(比如maven的profile、spring boot的profile-specific properties),即不同環境使用不同的配置文件,覆蓋的方式更有優勢。程序員在開發時不需要關心生產環境數據庫的地址、賬號等信息,一次構建即可在不同環境中運行,而profile機制需要將生產環境的配置寫到項目資源文件中,而且要為不同環境使用不同的構建參數或者運行參數。

Spring提供了靈活的配置擴展能力,有多種方式將自定義的屬性源,將集成進來,可以輕松地實現配置覆蓋。

本文基于Spring Boot 1.4.8/Spring 4.3.12編寫

使用@PropertySource注解實現自定義配置文件和配置覆蓋

@ConfigurationProperties@Configurationpublic class DemoProperties {  // properties with getter/setters}
@PropertySource(value = {    "test.properties",    "file:/etc/test.properties",},    ignoreResourceNotFound = true)@Configurationpublic class DemoAutoConfiguration {  @Autowired  private DemoProperties demoProperties;  @PostConstruct  public void init() {    System.out.println(demoProperties);  }}

Spring支持使用PropertySource注解引入自定義配置文件,其中"test.properties"將使Spring從classpath下加載該文件,"file:/etc/test.properties"將使Spring從文件系統加載/etc/test.properties文件,ignoreResourceNotFound = true使Spring忽略文件加載失敗的異常,即配置文件是可選的。

同時,由于"file:/etc/test.properties"位于"test.properties"之后,這使得文件系統的配置文件可以覆蓋classpath下的配置。

自定義屬性源工廠

如果想要更加靈活的自定義屬性源,比如實現從中心化的配置服務加載配置,可以通過實現PropertySourceFactory接口,并通過配置PropertySource注解的factory參數來實現。

@Configuration@PropertySource(value = ""/*placeholder*/,    factory = CompositePropertySourceFactory.class)public class CompositeConfigAutoConfiguration {}

value字段用于指定配置源對應的資源文件,如果不需要使用資源文件,可以配置為任意值,參數值將會被傳遞到factory參數的createPropertySource方法。

如果ignoreResourceNotFound字段指定為true,那么factory拋出的異常將被忽略,否則將導致啟動失敗。有的時候,直接把啟動失敗暴露出來不失為一種好的做法。

PropertySourceFactory接口的定義如下:

/** * Strategy interface for creating resource-based {@link PropertySource} wrappers. * * @author Juergen Hoeller * @since 4.3 * @see DefaultPropertySourceFactory */public interface PropertySourceFactory { /** * Create a {@link PropertySource} that wraps the given resource. * @param name the name of the property source * @param resource the resource (potentially encoded) to wrap * @return the new {@link PropertySource} (never {@code null}) * @throws IOException if resource resolution failed */ PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException;}

需要注意的是PropertySourceFactory的加載時機早于Spring Beans容器,因此實現上不能依賴于Spring的IOC。

PropertySourceFactory要求實現類返回PropertySource。PropertySource是Spring屬性(或者說配置)功能的核心接口,有很多實現,比如:

  1. ResourcePropertySource 從Resource加載PropertySource
  2. PropertiesPropertySource 從properties文件加載PropertySource
  3. SystemEnvironmentPropertySource 從系統環境變量加載PropertySource
  4. MapPropertySource 包裝一個Map為PropertySource(Adapter模塊)
  5. CompositePropertySource 支持將若干PropertySource進行組合(Composite模式)

實際實現類遠不如這些,具體的可以閱讀Spring文檔或源碼。

在自定義屬性源時比較常用的是MapPropertySource和CompositePropertySource。

MapPropertySource可以用于將自己加載的屬性數據包裝,參考其構造方法。

public MapPropertySource(String name, Map<String, Object> source) { super(name, source);}

后者可以通過組合裝載多個屬性源并自定義覆蓋順序。例如:

PropertySource<?> packageInsidePropertySource = packageInsidePropertySourceIterateLoader.loadPropertySource(compositePropertySource);compositePropertySource.addPropertySource(packageInsidePropertySource);PropertySource<?> outerFilePropertySource = outerFilePropertySourceIterateLoader.loadPropertySource(compositePropertySource);// 優先級高于前者compositePropertySource.addFirstPropertySource(outerFilePropertySource);

addFirstPropertySource方法可以設置傳入的PropertySource為最高優先級(在此CompositePropertySource內部),addPropertySource方法則相反,放在后面的優先級更低。

加載依賴jar包中所有同名配置文件

直接從classpath加載配置文件,要求文件必須存在于classpath中??紤]在WEB項目中,如果文件存在于某個依賴的jar包中,即位于WEB-INF/lib/xxx.jar中,此時基于classpath無法直接加載。此時可以使用Spring提供的PathMatchingResourcePatternResolver,按資源名稱掃描所有jar包來實現目的。

private List<Resource> getPackageInsideResourcesByPattern(String resourceName) throws IOException { String resourcePathPattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + HbootConfigConstants.CONFIGS + resourceName; ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); return Arrays.asList(resourcePatternResolver.getResources(resourcePathPattern));}

然后就可以使用ResourcePropertySource從Resource構建PropertySource傳給Spring。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲a中文字幕| 成人有码视频在线播放| 亚洲性猛交xxxxwww| 国内精品久久久久久| 2021久久精品国产99国产精品| 日韩精品中文字| 91精品在线国产| 狠狠色狠色综合曰曰| 中文字幕av一区中文字幕天堂| 欧美在线亚洲在线| 欧美在线视频播放| 美女撒尿一区二区三区| 久久亚洲精品视频| 777午夜精品福利在线观看| 8090理伦午夜在线电影| 91精品91久久久久久| 成人免费网站在线观看| 日本国产高清不卡| 欧美在线视频在线播放完整版免费观看| 欧美成年人视频网站| 成人春色激情网| 国产成人免费av| 亚洲精品久久久久久久久久久| 国产裸体写真av一区二区| 日韩福利在线播放| 精品伊人久久97| 日韩av一区在线观看| 中文日韩在线视频| 欧美激情va永久在线播放| 亚洲高清在线观看| 国产免费一区二区三区香蕉精| 日韩欧美在线观看视频| 粉嫩老牛aⅴ一区二区三区| 色婷婷久久一区二区| 亚洲精品第一国产综合精品| 亚洲天堂日韩电影| 欧美国产亚洲精品久久久8v| 一本色道久久综合亚洲精品小说| 日本a级片电影一区二区| 久久久久国色av免费观看性色| 国产精品久久久久一区二区| 欧美性猛交视频| 欧美成人在线免费| 国产一区二区丝袜| 久久精品成人一区二区三区| 亚洲人成在线免费观看| 91精品国产成人| 国产精品入口免费视| 成人免费大片黄在线播放| 日韩一区二区av| 久久久久久久久久久av| www.欧美免费| 欧美日韩一区二区三区在线免费观看| 亚洲第一天堂无码专区| 91美女片黄在线观| 亚洲直播在线一区| 国产美女搞久久| 日产精品99久久久久久| 亚洲欧美日韩久久久久久| 色视频www在线播放国产成人| 国产精品久久激情| 亚洲一区二区三区成人在线视频精品| 国产专区欧美专区| 久久久久久91| 日韩精品中文字幕在线观看| 久久99久久99精品免观看粉嫩| 亚洲美腿欧美激情另类| 亚洲精品国产精品久久清纯直播| 国产91在线高潮白浆在线观看| 福利精品视频在线| 美女精品视频一区| 91久久精品美女| 日韩欧美国产高清91| 欧美日韩亚洲一区二| 久久99久久久久久久噜噜| 久久精品成人欧美大片古装| 91国产美女在线观看| 97碰碰碰免费色视频| 久久九九全国免费精品观看| 最新国产成人av网站网址麻豆| 日韩欧美国产一区二区| 国产欧美日韩精品专区| 亚洲免费影视第一页| 一本色道久久88综合日韩精品| 中文字幕免费精品一区| 国产午夜精品美女视频明星a级| 久久99精品国产99久久6尤物| 国产亚洲一区二区在线| 国产视频观看一区| 日韩精品免费在线播放| 热久久美女精品天天吊色| 成人中心免费视频| 日韩精品999| 色777狠狠综合秋免鲁丝| 亲爱的老师9免费观看全集电视剧| 色综合久久久久久中文网| 97成人精品区在线播放| 久久精品视频在线观看| 伊人一区二区三区久久精品| 国产亚洲精品美女久久久| 久久久国产精品视频| 美女av一区二区三区| 95av在线视频| 精品视频在线观看日韩| 国产亚洲精品久久久| 91黑丝高跟在线| 97在线看福利| 亚洲美女精品成人在线视频| 国产91网红主播在线观看| 欧美wwwxxxx| 亚洲а∨天堂久久精品喷水| 2021久久精品国产99国产精品| 久久精品精品电影网| 91精品国产色综合久久不卡98| 成人久久久久爱| 欧美插天视频在线播放| 精品成人国产在线观看男人呻吟| 亚洲视频在线观看网站| 日韩网站免费观看高清| 国产成人拍精品视频午夜网站| 在线观看日韩www视频免费| 亚洲精品女av网站| 97在线日本国产| 久久久这里只有精品视频| 欧美综合国产精品久久丁香| 日本精品性网站在线观看| 亚洲理论电影网| 精品视频9999| 精品欧美aⅴ在线网站| 亚洲一区二区三区久久| 久久久久久国产免费| 91av在线视频观看| 欧美午夜影院在线视频| 亚洲欧洲在线观看| 久久精品电影一区二区| 久久久999精品免费| 九九热这里只有精品免费看| 久久艳片www.17c.com| 欧美亚洲国产视频| 欧美精品久久久久久久久久| 国产又爽又黄的激情精品视频| 亚洲成人精品视频在线观看| 国精产品一区一区三区有限在线| 日韩高清免费在线| 欧美电影在线观看网站| 成人在线视频网| 国产成人精彩在线视频九色| 国产一区二区三区毛片| 久久999免费视频| 日韩精品极品在线观看播放免费视频| 伊人伊人伊人久久| 国产综合在线看| 国产视频精品免费播放| 亚洲一区二区三区xxx视频| 国产福利精品av综合导导航| 国产精品视频免费在线| 亚洲丝袜av一区| 日韩黄色在线免费观看| 国产视频精品在线| 日韩视频精品在线| 国产日韩精品入口| 亚洲最新av在线| 国产日韩欧美在线| 国产日韩欧美另类|