在Java开发中,配置文件是应用程序与外部环境交互的重要桥梁,通过配置文件可以实现代码与配置的分离,提高应用的灵活性和可维护性,获取配置文件的值是Java开发中的基础技能,本文将详细介绍常见的配置文件类型、多种获取配置值的方法及其实际应用场景。

常见配置文件类型及特点
在Java项目中,常用的配置文件格式包括Properties、XML、YAML和JSON,每种格式都有其独特的适用场景和特点。
Properties文件(.properties)
Properties文件是Java中最传统的配置文件格式,采用键值对存储,结构简单,易于读写,其特点是:
- 文件扩展名为
.properties; 格式为key=value,注释以或开头; - 支持Unicode字符,需通过
\uXXXX转义; - 适用于小型项目或简单配置场景,如数据库连接信息、系统参数等。
示例:
# 数据库配置 db.url=jdbc:mysql://localhost:3306/test db.username=root db.password=123456
XML文件(.xml)
XML文件结构严谨,支持层级嵌套,适合复杂配置场景,其特点是:
- 通过标签嵌套表示层级关系,如
<db><url>...</url></db>; - 支持属性和子节点两种赋值方式;
- 可结合DTD或XSD进行约束,保证配置规范性;
- 常用于Spring框架的配置文件,如
applicationContext.xml。
示例:
<configuration>
<database>
<url>jdbc:mysql://localhost:3306/test</url>
<username>root</username>
<password>123456</password>
</database>
</configuration>
YAML文件(.yml/.yaml)
YAML是YAML Ain’t Markup Language的递归缩写,以数据为中心,支持层级缩进,可读性强,其特点是:
- 通过缩进表示层级关系,无需闭合标签;
- 支持数组、对象等复杂数据结构;
- 注释以开头,支持多行字符串;
- 是Spring Boot默认的配置文件格式,如
application.yml。
示例:
database: url: jdbc:mysql://localhost:3306/test username: root password: 123456 pool-size: 10
JSON文件(.json)
JSON文件轻量级,易于机器解析和生成,常用于前后端分离项目的配置,其特点是:
- 格式严格,键值对用包裹,数组用
[]包裹; - 支持嵌套结构,数据类型丰富(字符串、数字、布尔值等);
- 可通过Jackson、Gson等库直接解析为Java对象;
- 需注意JSON文件不支持注释,需通过工具或代码实现注释功能。
示例:
{
"database": {
"url": "jdbc:mysql://localhost:3306/test",
"username": "root",
"password": "123456"
}
}
标准Java API获取配置值
对于不依赖框架的纯Java项目,可通过标准库提供的API读取配置文件。
使用Properties类读取.properties文件
java.util.Properties是Java提供的专门用于处理.properties文件的类,核心步骤包括:加载文件、获取属性值。

实现步骤:
- 创建
Properties对象; - 通过
ClassLoader加载配置文件(需位于classpath下); - 调用
getProperty(key)或getProperty(key, defaultValue)获取值。
代码示例:
import java.io.InputStream;
import java.util.Properties;
public class ConfigReader {
public static void main(String[] args) {
Properties props = new Properties();
try (InputStream input = ConfigReader.class.getClassLoader().getResourceAsStream("config.properties")) {
if (input == null) {
throw new RuntimeException("配置文件未找到");
}
props.load(input);
String dbUrl = props.getProperty("db.url");
String username = props.getProperty("db.username", "defaultUser"); // 带默认值
System.out.println("数据库URL: " + dbUrl);
System.out.println("用户名: " + username);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意事项:
- 配置文件需放在
src/main/resources目录下,确保ClassLoader能找到; - 使用
try-with-resources关闭流,避免资源泄漏; - 若配置文件在文件系统路径(非
classpath),可通过FileInputStream加载,但需注意路径灵活性。
使用ResourceBundle读取国际化资源
java.util.ResourceBundle主要用于国际化场景,也可读取普通配置文件,特点是支持按需加载不同语言环境的配置。
实现步骤:
- 通过
ResourceBundle.getBaseName()指定配置文件基础名称(不含扩展名); - 调用
getString(key)获取字符串值,或getObject(key)获取对象值。
代码示例:
import java.util.ResourceBundle;
public class ResourceBundleDemo {
public static void main(String[] args) {
ResourceBundle bundle = ResourceBundle.getBundle("config"); // 默认加载config.properties
String value = bundle.getString("db.url");
System.out.println("配置值: " + value);
}
}
注意事项:
- 配置文件需位于
classpath下,且命名规则为basename_locale.properties(如config_zh_CN.properties); - 不支持动态更新配置文件,需重启应用才能生效。
Spring框架中的配置读取方式
在企业级Java开发中,Spring框架提供了更灵活的配置读取方式,支持依赖注入和类型安全绑定。
@Value注解注入单个属性
@Value是Spring提供的注解,可直接将配置文件的值注入到字段或方法参数中,适用于简单场景。
实现步骤:
- 在Spring配置类上添加
@PropertySource指定配置文件路径(可选,默认读取application.properties); - 在字段上使用
@Value("${key:default}")注入值,后可指定默认值。
代码示例:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource("classpath:custom.properties") // 指定自定义配置文件
public class AppConfig {
@Value("${app.name:默认应用名}")
private String appName;
@Value("${server.port:8080}")
private int serverPort;
public void printConfig() {
System.out.println("应用名称: " + appName);
System.out.println("服务端口: " + serverPort);
}
}
注意事项:
- 若未指定
@PropertySource,默认读取application.properties或application.yml; - 支持SpEL表达式,如
@Value("#{ T(java.lang.Math).random() }")。
@ConfigurationProperties绑定配置到对象
@ConfigurationProperties可将配置文件中的批量属性绑定到Java对象,实现类型安全的配置管理,适合复杂配置场景。
实现步骤:
- 创建配置类,添加
@ConfigurationProperties注解,并通过prefix指定配置前缀; - 为配置类提供getter/setter方法(或使用
@Data等Lombok注解); - 在Spring配置类上添加
@EnableConfigurationProperties启用绑定。
代码示例:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "database") // 绑定database前缀下的配置
public class DatabaseConfig {
private String url;
private String username;
private String password;
private int poolSize;
// getter/setter方法
public String getUrl() { return url; }
public void setUrl(String url) { this.url = url; }
// 其他getter/setter...
}
// 使用配置
@RestController
public class ConfigController {
@Autowired
private DatabaseConfig databaseConfig;
@GetMapping("/config")
public String getConfig() {
return "数据库URL: " + databaseConfig.getUrl();
}
}
注意事项:
- 配置文件中的驼峰命名(如
poolSize)会自动映射到pool-size或pool.size,可通过@ConfigurationProperties的nameConverter自定义转换规则; - 支持嵌套对象和集合类型,如
List<String>、Map<String, Object>等。
Spring Boot自动配置与多环境支持
Spring Boot通过application.yml或application.properties实现自动配置,并支持多环境配置:
- 多环境文件命名规则:
application-{profile}.properties(如application-dev.properties); - 通过
spring.profiles.active激活环境,如java -jar app.jar --spring.profiles.active=dev; - 主配置文件(
application.properties)中可定义公共配置,各环境文件覆盖特定配置。
高级场景与最佳实践
配置文件路径管理
- classpath路径:推荐将配置文件放在
src/main/resources下,通过@PropertySource("classpath:config.properties")加载; - 文件系统路径:通过
@PropertySource("file:/path/to/config.properties")加载外部配置,适合动态修改配置无需重启的场景。
默认值与异常处理
- 使用
@Value或Properties.getProperty()时,提供默认值避免空指针异常; - 通过
@Validated注解结合@ConfigurationProperties实现配置校验,如@Min(0)限制数值范围。
敏感信息加密
- 数据库密码、API密钥等敏感信息不应明文存储,可通过Jasypt加密:
- 添加Jasypt依赖;
- 使用
StringEncryptor加密配置值,如ENC(加密后字符串); - 启动时通过
-Djasypt.encryptor.password=密钥解密。
配置热更新
- 对于动态配置需求(如开关、限流阈值),可结合Spring Cloud Config或Nacos实现配置热更新,无需重启应用即可生效。
获取配置文件的值是Java开发中的基础能力,需根据项目需求选择合适的方式:
- 小型项目:推荐使用
Properties或ResourceBundle,轻量且无需额外依赖; - Spring/Spring Boot项目:优先使用
@Value和@ConfigurationProperties,支持依赖注入和类型安全; - 复杂场景:考虑YAML/JSON格式,结合多环境配置和加密技术,提升配置管理的灵活性和安全性。
无论选择哪种方式,都需遵循“配置与代码分离”原则,并通过默认值、异常处理、加密等手段确保配置的健壮性和安全性。



















