Java 配置管理

配置与代码分离:来源优先级、类型安全与可测试注入。

#type / concept #status / growing #tech / dev #resource / java

[!info] 关联笔记

Java 配置管理

这个概念为什么出现

同一构件要跑在 dev/stage/prod:端口、数据库 URL、特性开关不同。配置必须外置,且可测试、可审计。

[!abstract] 一句话理解 配置从环境/文件/启动参数注入,与代码分离;明确优先级与类型转换,密钥不进仓库。

最小可运行示例

场景:从环境变量读服务端口,缺省 8080

public class PortConfig {
    static int port() {
        String raw = System.getenv().getOrDefault("APP_PORT", "8080");
        int p = Integer.parseInt(raw);
        if (p < 1 || p > 65535) throw new IllegalArgumentException("bad port");
        return p;
    }
    public static void main(String[] args) {
        System.out.println(port());
    }
}
javac PortConfig.java && APP_PORT=9090 java PortConfig

期望:

9090

结合场景再看三个关注点

  1. 缺省值要安全
  2. 校验失败要快死在启动期。
  3. 密钥用密钥管理,不是明文 properties 提交。

核心概念与准确模型

1. 来源

env / 系统属性 / 配置文件 / 远程配置中心

2. 优先级

团队写清覆盖顺序,避免“神秘生效”。

3. 类型安全

解析 int/bool/时长;框架(Spring)可绑定对象。

边界情况与反直觉行为

  1. 容器与本地 env 注入差异。
  2. 多文档 yaml 合并坑。
  3. 动态刷新与一致性。

常见误区

[!warning] 常见误区:配置散落硬编码常量 改环境要重新编译发布,违反十二要素。

工程实践

  1. 启动时校验全部必填配置。
  2. 配置项文档化。
  3. 测试注入假配置。
  4. 敏感项脱敏日志。

本节总结

  • 外置配置
  • 校验与优先级
  • 密钥分离

自测题

  1. 为什么配置错误应启动失败?
  2. 系统属性与环境变量如何选?
参考答案
  1. 避免带错误配置半运行造成数据事故。
  2. 容器/12-factor 常偏 env;JVM 级调优常用系统属性;关键是一致与文档。

延伸阅读与资料来源

资料类型支撑内容
12-Factor Config工程原则配置外置
创建于 2026/7/15 更新于 2026/7/15