Java Properties类可支撑轻量级配置中心,线程安全、简单可控,支持文件加载/保存与热更新(需WatchService监听),适合中小项目;注意编码、空格、注释及敏感信息处理。

Java自带的Properties类足够支撑轻量级配置中心的核心能力,无需引入复杂框架,适合中小项目或内部工具快速落地。
Properties本质是键值对集合
Properties继承自Hashtable,天然线程安全,支持从文件、流、字符串加载,也支持保存回磁盘。它不处理嵌套结构或类型转换,但胜在简单可控——所有值都是String,避免了JSON/YAML解析带来的依赖和异常风险。
典型用法示例:
- 读取配置文件:
props.load(new FileInputStream("app.properties")) - 获取值:
props.getProperty("db.url", "jdbc:h2:mem:test")(带默认值更健壮) - 动态更新:
props.setProperty("log.level", "DEBUG"),再调用store()持久化
实现热更新的关键:监听+重载
Properties本身无监听机制,需手动补充。常用方式是用WatchService监控文件修改事件,触发重新加载逻辑。
立即学习“Java免费学习笔记(深入)”;
要点提示:
- 不要每次读取都新建
Properties实例,建议单例持有并提供reload()方法 - 重载时先读新内容到临时对象,校验通过后再原子替换旧对象,避免中间态出错
- 可加简单版本号或时间戳字段(如
config.version=202405201430),便于排查是否生效
支持多环境配置的小技巧
不用硬编码环境名,通过JVM参数或系统属性控制加载路径:
- 启动时指定:
java -Dprofile=prod MyApp - 代码中拼接:
String file = String.format("config-%s.properties", System.getProperty("profile", "dev")) - 也可约定优先级:先加载
config-prod.properties,缺失则回退到config.properties
避免踩坑的实用建议
Properties看似简单,实际使用中几个细节容易引发问题:
-
等号和冒号前后空格会被保留,建议统一用
=且不加空格,或加载后用trim()处理值 - 中文需确保文件编码为UTF-8,并在
load()时用InputStreamReader显式指定编码,否则乱码 - 注释行以
#或!开头,但不要在键值对后加内联注释(如port=8080 #服务端口),会导致值被截断 - 敏感配置(如密码)不建议明文写在properties中,可预留占位符,运行时由外部注入










