java - Spring boot 的不可变配置
问题描述
我正在尝试找到一种方法来使用Immutables 库来创建数据类来保存我的 Spring Boot 应用程序的配置。
我的数据配置类是:
@Value.Immutable
@JsonDeserialize(as = ImmutableAuthConfig.class)
public interface AuthConfig {
String domain();
String clientId();
@Value.Redacted
String clientSecret();
}
而主配置类设置为
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class Config {
private ImmutableAuthConfig auth;
public AuthConfig getAuth() {
return auth;
}
public void setAuth(ImmutableAuthConfig auth) {
this.auth = auth;
}
}
我尝试了一些使用其中一个ImmutableAuthConfig
或仅AuthConfig
作为一个字段的变体,但没有任何改善这种情况。配置没有被拾取,并且在应用程序启动后auth
配置的字段仍然存在。null
用传统的 POJO替换AuthConfig
类的内容可以解决问题,但我更喜欢不可变对象。有什么方法可以说服 Spring 与 Immutables 库生成的类进行交互?
解决方案
该库对可修改类的支持提供了一种与我正在寻找的方法非常接近的方法。
@Value.Modifiable
public interface AuthConfig {
String domain();
String clientId();
@Value.Redacted
String clientSecret();
}
这将创建一个类ModifiableAuthConfig
,该类提供一个满足 Spring 的接口JavaBeanBinder
,用于反序列化配置。
此外,还需要提供一个可变AuthConfig
类的实例,然后 Spring 可以填充该实例:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class Config {
private ImmutableAuthConfig auth = ModifiableAuthConfig.create();
public AuthConfig getAuth() {
return auth;
}
}
随后可以通过AuthConfig
不提供变异方法的接口对加载的配置进行任何使用。
推荐阅读
- python-3.x - 将跨越两年的数据相加,大熊猫
- apache-camel - 查询两个不同的后端休息端点然后使用 Camel 获得第一个响应的正确模式 (EIP) 是什么?
- python - tpot:仅使用多输出回归器
- javascript - 将列表呈现为 ListItems 和 Links
- php - 数据库查询语法
- python-3.x - 如何让python时间更新
- windows - 永久设置 kubectl 缓存目录
- python - Amazon Lex 中的分段验证/解析
- python - 连续 DDPG 似乎没有收敛于二维空间搜索问题(“Hunt the Thimble”)
- apache-camel - Camel - ControlBus - 激活定时器路由