統一訪問 Properties、XML、JNDI、系統屬性等異構配置源,支援配置合併、優先級覆蓋、列表/數組類型轉換,消除硬編碼默認值。
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.10</version>
</dependency>
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"); // 自動識別同名元素為列表
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 文件 |
| XMLConfiguration | XML 文件 |
| JNDIConfiguration | JNDI 樹鍵值 |
| SystemConfiguration | 系統屬性 System.getProperties() |
| BaseConfiguration / HierarchicalConfiguration | 內存對象 |
| ConfigurationConverter | 轉換 java.util.Properties 或 ExtendedProperties |
CompositeConfigurationCompositeConfiguration 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/>。實現「系統級覆蓋 > 應用級 > 默認值」的分層配置管理。
getList()/getStringArray() 處理多值配置,避免手工分割