Properties类加载配置文件需确保路径可定位、编码不乱码、内容可更新、使用够安全:放resources下用ClassLoader加载,中文须指定UTF-8编码,封装为配置对象,支持轮询热更新并加锁保障线程安全。

直接用 Properties 类加载配置文件来管理项目持久化环境参数,关键在于“路径可定位、编码不乱码、内容可更新、使用够安全”。下面从实际开发中高频遇到的几个环节讲清楚怎么做。
确保配置文件放在正确位置并能被 ClassLoader 找到
多数 Java 项目(尤其 Spring Boot)默认将 .properties 文件放在 src/main/resources/ 目录下。此时可通过类加载器直接获取流:
-
MyClass.class.getResourceAsStream("/application.properties")—— 路径以/开头,表示从 classpath 根开始找 -
MyClass.class.getClassLoader().getResourceAsStream("config/db.properties")—— 不加开头斜杠,按包路径相对查找 - 若文件在磁盘任意路径(如
/etc/myapp/config.properties),就用FileInputStream或Files.newInputStream(Paths.get(...))加载
处理中文和特殊字符必须显式指定 UTF-8 编码
Java 的 Properties.load(InputStream) 默认用 ISO-8859-1 解码,中文会变问号或乱码。正确做法是用字符流接口:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 用
InputStreamReader包装输入流,并指定StandardCharsets.UTF_8 - 示例:
properties.load(new InputStreamReader(in, StandardCharsets.UTF_8)) - 如果用
ResourceBundle.getBundle("config"),需确保文件名带语言后缀(如config_zh_CN.properties)且内容已按 Unicode 转义(\u4f60\u597d),否则仍建议改用Properties+ UTF-8 流方式
把配置项映射成环境可用的参数对象
不建议在业务代码里到处写 props.getProperty("db.url")。推荐封装一层:
- 定义一个配置类(如
DatabaseConfig),含url、username、maxPoolSize等字段 - 提供静态工厂方法:用
Properties实例逐个调用getProperty(key, defaultValue)赋值,空值或格式错误时抛明确异常 - 若用 Spring,可结合
@ConfigurationProperties(prefix = "db")自动绑定,底层仍是Properties加载机制
支持运行时动态更新(非重启生效)
标准 Properties 本身不监听文件变化,但可借助简单轮询+原子重载实现轻量热更新:
- 记录配置文件最后修改时间戳(
file.lastModified()) - 定期检查是否变更,若变更则重新
load()并刷新内存中的配置对象 - 注意加读写锁(如
ReentrantReadWriteLock),避免读配置时正在 reload 导致不一致 - 生产环境更推荐用
spring-boot-devtools或外部配置中心(如 Nacos),但底层原理仍是基于Properties解析逻辑










