首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Jakarta Commons Configuration 使用指南:多源配置統一管理與優先級合併

     編輯:Java 相關知識

核心價值

統一訪問 Properties、XML、JNDI、系統屬性等異構配置源,支援配置合併、優先級覆蓋、列表/數組類型轉換,消除硬編碼默認值。

Maven 依賴

<dependency>
  <groupId>commons-configuration</groupId>
  <artifactId>commons-configuration</artifactId>
  <version>1.10</version>
</dependency>

單一配置源讀取

1. XML 配置 (XMLConfiguration)

<config>
  <ip>10.10.1.1</ip>
  <account>jini</account>
  <password>jakarta99</password>
  <roles>
    <role>admin</role>
    <role>manager</role>
    <role>user</role>
  </roles>
</config>
XMLConfiguration config = new XMLConfiguration(getClass().getResource("/demo/system-config.xml"));
String ip = config.getString("ip");
List<?> roles = config.getList("roles.role"); // 自動識別同名元素為列表

2. Properties 配置 (PropertiesConfiguration)

ip=10.10.1.1
account=jini
password=jakarta99
role1=admin
role2=manager
role3=user
colors.pie = #FF0000, #00FF00, #0000FF
PropertiesConfiguration config = new PropertiesConfiguration(getClass().getResource("/demo/system-config.properties"));
String ip = config.getString("ip");
String[] colors = config.getStringArray("colors.pie"); // 逗號分隔自動轉數組
List<?> colorList = config.getList("colors.pie");   // 同樣轉 List

常見配置源實現類

類別來源
PropertiesConfiguration.properties 文件
XMLConfigurationXML 文件
JNDIConfigurationJNDI 樹鍵值
SystemConfiguration系統屬性 System.getProperties()
BaseConfiguration / HierarchicalConfiguration內存對象
ConfigurationConverter轉換 java.util.Properties 或 ExtendedProperties

多源合併與優先級覆蓋 (核心進階)

方式一:程式化 CompositeConfiguration

CompositeConfiguration config = new CompositeConfiguration();
config.addConfiguration(new SystemConfiguration());           // 最高優先級
config.addConfiguration(new PropertiesConfiguration("app.properties")); // 次之
config.addConfiguration(new XMLConfiguration("default.xml"));          // 最低默認值

// 查找順序:System → app.properties → default.xml
String ip = config.getString("ip");

方式二:聲明式 ConfigurationFactory + config.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<configuration>
  <system/>
  <properties fileName="application.properties"/>
</configuration>
ConfigurationFactory factory = new ConfigurationFactory("config.xml");
Configuration config = factory.getConfiguration();

優先級按 XML 聲明順序:<system/> 覆蓋 <properties/>。實現「系統級覆蓋 > 應用級 > 默認值」的分層配置管理。

最佳實踐建議

  1. 默認值放最低優先級 XML,環境差異放 Properties,敏感/臨時覆蓋用系統屬性
  2. 利用 getList()/getStringArray() 處理多值配置,避免手工分割
  3. 生產環境敏感配置 (密碼) 建議通過 JNDI 或系統屬性注入,不落盤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved