SuperAPI AI 工具集

configuration-properties

编程与开发

查看项目

更新于 10-16 04:17

技能介绍

用途

该技能面向 Spring Boot 3 项目,用于引入或修正分组配置、类型化属性绑定、校验、Profile 与密钥注入。示例基于 Java 17 与 Jakarta API,依赖由项目的 Boot BOM 管理。

主要能力

  • 在重命名键之前,先检查现有属性前缀与外部部署配置。
  • 使用类型化的 ConfigurationProperties record 绑定一组相关设置,并通过 EnableConfigurationProperties 或 ConfigurationPropertiesScan 注册;record 不会自动成为 bean。
  • 使用 Validated 与 Jakarta 约束进行校验,并引入 spring-boot-starter-validation;嵌套对象使用 Valid 校验。单个 record 构造函数无需 ConstructorBinding 注解。
  • 为时长和大小使用显式单位。仅在运维安全时提供默认值;缺失凭据或必需端点应使启动失败。不要假设 NotNull 会拒绝零或负的 Duration 值,应添加时长约束或显式不变量。
  • ClientProperties 及其配置展示了带显式时长单位的校验前缀。
  • 不要将完整 API 令牌作为 record 组件:生成的 toString 可能暴露密钥。应在集成边界解析密钥,或使用脱敏值类型。

使用方式

  • 记录公开属性键,并在测试中验证实际的环境变量绑定。
  • 根据部署平台使用环境变量或挂载的密钥/配置树。
  • 更高优先级的属性源可以覆盖打包默认值;测试预期的 Profile 与覆盖路径。
  • 避免依赖 YAML 列表合并:列表通常会被替换。
  • 将 Profile 激活配置放在不被该 Profile 自身激活的文档之外。
  • 不要公开 configprops/env actuator 端点,也不要为调试而禁用脱敏。
  • 绑定通常在启动时进行;更改文件或密钥并不意味着实时刷新。配置变更时需定义重启/轮换行为。

验证

使用 ApplicationContextRunner 配合 EnableConfigurationProperties,断言有效绑定以及缺失或无效设置时的启动失败。测试嵌套校验、单位转换以及实际部署的覆盖路径。至少包含一个无效时长测试。

常见陷阱

  • 定义了 properties record 但从未注册——需启用扫描或显式注册。
  • 添加了 Validated 但没有校验提供者——需引入校验 starter。
  • 使用裸数字超时——应使用显式单位。
  • 添加默认凭据——应快速失败并在外部注入密钥。
  • 记录完整的绑定配置——应脱敏含密钥的值。

官方来源

  • Boot external configuration
  • Configuration property validation