在Java开发中,配置文件的管理与读取是构建灵活、可维护应用程序的关键环节,无论是数据库连接信息、系统参数还是第三方服务密钥,合理地使用配置文件能够避免硬编码,提升代码的可移植性和可扩展性,本文将详细介绍Java中获取配置文件的多种方式,涵盖基础用法、最佳实践及常见场景,帮助开发者根据项目需求选择合适的方案。

传统方式:使用Properties类读取.properties文件
.properties文件是Java中最常用的配置文件格式,其以键值对的形式存储数据,结构简单且易于阅读。java.util.Properties类提供了专门的操作方法,是读取此类文件的经典选择。
基本步骤如下:
- 加载配置文件:通过
ClassLoader的getResourceAsStream()方法获取配置文件的输入流,确保文件位于resources目录下(Maven/Gradle项目标准结构)。InputStream input = getClass().getClassLoader().getResourceAsStream("config.properties"); - 创建Properties对象并加载:实例化
Properties类,调用load()方法将输入流中的数据加载到内存中。Properties props = new Properties(); props.load(input);
- 获取配置值:使用
getProperty(String key)方法根据键获取对应的值,支持设置默认值(如getProperty("key", "default"))。String dbUrl = props.getProperty("db.url");
注意事项:
- 文件路径需注意开头表示从类根路径查找,否则会相对于当前类路径;
- 流使用后需通过
close()关闭,建议使用try-with-resources语句避免资源泄漏; - 若配置文件包含中文,需在加载时指定字符集(如
new InputStreamReader(input, "UTF-8"))。
进阶方式:使用XML配置文件与PropertiesLoaderUtils
对于需要复杂结构(如分层配置、注释)的场景,XML格式的配置文件更为合适,Spring框架提供了org.springframework.util.PropertiesLoaderUtils工具类,简化了XML配置文件的读取。
示例代码:
假设存在config.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Database Configuration</comment>
<entry key="db.driver">com.mysql.cj.jdbc.Driver</entry>
<entry key="db.username">root</entry>
</properties>
通过以下代码加载:
Properties props = PropertiesLoaderUtils.loadAllProperties("config.xml");
String driver = props.getProperty("db.driver");
优势:

- XML支持注释和嵌套结构,配置可读性更强;
PropertiesLoaderUtils会自动处理资源流关闭,减少手动管理成本。
企业级方案:使用Spring框架的@Value注解
在Spring/Spring Boot项目中,通过@Value注解可以直接将配置文件中的值注入到字段中,实现配置与代码的解耦,默认情况下,Spring Boot会加载application.properties或application.yml文件。
基础用法:
@Value("${db.url}")
private String dbUrl;
@Value("${server.port:8080}") // 支持默认值
private int serverPort;
多环境配置:
通过application-{profile}.properties区分环境(如application-dev.properties、application-prod.properties),在启动时通过spring.profiles.active=dev指定生效配置。
YAML文件支持:
Spring Boot原生支持YAML格式(application.yml),其层级结构更清晰,适合复杂配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: ${DB_USERNAME:root} # 支持变量引用与默认值
动态配置:使用Apache Commons Configuration
若需实现配置文件的热更新(无需重启应用)或支持多种配置源(如JSON、数据库),Apache Commons Configuration是更强大的选择。
核心功能:
- 支持多种格式(
.properties、.xml、.json、.yaml等); - 提供监听机制,可监听配置文件变化并触发回调;
- 支持配置表达式(如
${sys:user.home}引用系统属性)。
示例代码:

Configuration config = new PropertiesConfiguration("config.properties");
config.addEventListener(ConfigurationEvent.ANY, event -> {
System.out.println("Config changed: " + event.getPropertyName());
});
String value = config.getString("key");
最佳实践与注意事项
-
配置文件位置规范:
- Maven/Gradle项目中,配置文件统一放在
src/main/resources目录下; - 非标准路径可通过
File对象指定,但需注意路径分隔符和跨平台兼容性。
- Maven/Gradle项目中,配置文件统一放在
-
敏感信息保护:
避免将密码、密钥等敏感信息直接写入配置文件,建议使用环境变量或密钥管理服务(如AWS KMS、HashiCorp Vault)。
-
编码与字符集:
- 始终使用UTF-8编码保存配置文件,避免乱码问题;
- 读取时显式指定字符集(如
InputStreamReader(input, "UTF-8"))。
-
配置优先级:
- 多配置源并存时,需明确优先级(如Spring Boot中
application.properties覆盖application.yml,命令行参数覆盖配置文件)。
- 多配置源并存时,需明确优先级(如Spring Boot中
Java获取配置文件的方式多样,开发者需根据项目规模、技术栈和需求场景选择合适方案,小型项目可直接使用Properties类;Spring项目优先考虑@Value注解;企业级应用或需要动态配置时,Apache Commons Configuration是更优解,无论选择哪种方式,遵循“配置与代码分离、敏感信息加密、规范管理”的原则,才能构建出健壮、易维护的系统。


















