apache commons configuration2(2.x)是推荐的配置管理方案,支持properties/xml/yaml/json等格式、热更新和多源合并;需引入commons-configuration2、commons-beanutils、commons-jxpath依赖,避免与1.x混用。

Java 中用 Apache Commons Configuration 读取外部配置文件,核心是选对版本、配好依赖、按格式加载、用统一 API 取值。它比原生 Properties 更灵活,支持热更新、多源合并、层级访问,适合中大型项目。
选版本 & 加依赖
推荐直接用 commons-configuration2(2.x),它是 1.x 的重写版,API 更清晰,支持 YAML、JSON 等新格式,且与旧版不兼容。Maven 依赖如下:
-
org.apache.commons:commons-configuration2:2.10+(主包) -
commons-beanutils:commons-beanutils:1.9.4(必需,用于反射和类型转换) -
commons-jxpath:commons-jxpath:1.3(XML 路径解析必需)
注意:不要混用 1.x 和 2.x 的类,比如 PropertiesConfiguration(1.x)和 org.apache.commons.configuration2.PropertiesConfiguration(2.x)完全不是一回事。
读取 properties 文件
这是最常用场景。假设你有一个 app.properties:
database.host=localhost database.port=3306 feature.enabled=true log.level=DEBUG
代码这样写:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 用
Configurations工厂创建配置对象:new Configurations().properties("app.properties") - 路径可以是 classpath 下的相对路径(如
"config/app.properties"),也可以是绝对文件路径(如new File("/opt/conf/app.properties")) - 读值直接调用
config.getString("database.host")、config.getInt("database.port")、config.getBoolean("feature.enabled"),类型安全且自动转换
读取 XML 文件
XML 支持层级结构和属性。例如 config.xml:
<?xml version="1.0"?><config><database url="jdbc:h2:mem:testdb"><user>sa</user><password></password></database></config>
读取时仍用 new Configurations().xml("config.xml"),但取值方式不同:
- 元素文本:
config.getString("config.database.user")→"sa" - 属性值:
config.getString("config.database[@url]")→"jdbc:h2:mem:testdb"(方括号加 @ 表示取属性) - 支持类似 XPath 的点号路径,无需手动解析 DOM
启用热更新(自动重载)
开发或配置频繁变动时,可让配置在文件修改后自动刷新:
- 对 properties 或 XML 配置对象,调用
.setReloadingStrategy(new FileChangedReloadingStrategy()) - 默认每 5 秒检查一次文件最后修改时间,可传入毫秒参数自定义间隔,例如
new FileChangedReloadingStrategy(3000) - 注意:该策略只监听单个文件,不支持目录或通配符;若需监听多个文件,建议用
CombinedConfiguration合并多个源
不复杂但容易忽略:配置对象是线程安全的,可全局复用;但每次读取都走内部缓存+校验逻辑,无需自己加锁或缓存包装。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










