怎样读取应用配置?
查看完整题解
参考回答
直接回答
简单值可用 Value,按需查询可用 Environment,一组有结构的配置常用 ConfigurationProperties 绑定到专门类型。它们读取同一环境中的属性,却有不同的类型绑定、验证和表达能力。读取成功不表示配置来源正确,也不表示密码可以安全打印到日志。
讲清原理
配置属性适合表达地址、超时和开关,可结合类型转换与验证,让不合法值在启动阶段明确失败。绑定类型需要正确注册;不可只给任意类加注解就假定它已被扫描与实例化。
Environment适合动态按键查询,但不会自动把多个相关键变成一个受验证的业务配置。Value适合少量值,不应把大量分散字段代替一个有清楚边界的配置对象。
例子与易错点
时间建议使用Duration等表达单位,避免“100到底是秒还是毫秒”的隐藏约定。测试同时覆盖默认值、外部覆盖和错误值,敏感值只记录是否配置,不记录原文。
以下为 Java 21 类成员示例,放入同一外部类中使用,依赖 Boot4.1.2 / Framework7.0.10。验证类型绑定与非法Duration,不把它当作约束验证器已经自动运行。
record RetryConfig(java.time.Duration timeout, int attempts) { }
static RetryConfig bind(java.util.Map<String,?> values) {
var source=new org.springframework.boot.context.properties.source.MapConfigurationPropertySource(values);
return new org.springframework.boot.context.properties.bind.Binder(source)
.bind("lesson16.retry",org.springframework.boot.context.properties.bind.Bindable.of(RetryConfig.class))
.orElseThrow(() -> new IllegalArgumentException("missing-config"));
}
相关题:第 4 题、第 5 题、第 14 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。