gpt4 book ai didi

java - Spring Boot 的不可变配置

转载 作者:搜寻专家 更新时间:2023-11-01 03:31:37 26 4
gpt4 key购买 nike

我正在尝试找到一种使用 Immutables library 的方法创建数据类来保存我的 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 库生成的类进行交互?

最佳答案

图书馆对 modifiable classes 的支持提供了一种与我正在寻找的方法非常接近的方法。

@Value.Modifiable
public interface AuthConfig {
String domain();
String clientId();

@Value.Redacted
String clientSecret();
}

这将创建类 ModifiableAuthConfig,它提供了一个满足 Spring 的 JavaBeanBinder 的接口(interface),用于反序列化配置。

此外还需要提供可变 AuthConfig 类的实例,然后 Spring 可以填充该实例:

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class Config {
private ImmutableAuthConfig auth = ModifiableAuthConfig.create();

public AuthConfig getAuth() {
return auth;
}
}

任何对加载配置的使用随后都可以通过 AuthConfig 接口(interface)进行,该接口(interface)不提供变异方法。

关于java - Spring Boot 的不可变配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51076522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com