Spring 引导的不可变配置
Immutable configuration of Spring boot
我正在尝试找到一种方法来使用 Immutables library 创建数据 classes 来保存我的 Spring 启动应用程序的配置。
我的数据配置class是:
@Value.Immutable
@JsonDeserialize(as = ImmutableAuthConfig.class)
public interface AuthConfig {
String domain();
String clientId();
@Value.Redacted
String clientSecret();
}
而主配置class设置为
@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
class 的内容可以解决问题,但我更喜欢不可变对象。有什么方法可以说服 Spring 与 Immutables 库生成的 classes 交互吗?
库对 modifiable classes 的支持提供了一种非常接近我所搜索的方法。
@Value.Modifiable
public interface AuthConfig {
String domain();
String clientId();
@Value.Redacted
String clientSecret();
}
这将创建 class ModifiableAuthConfig
,它提供满足 Spring 的 JavaBeanBinder
的接口,用于反序列化配置。
此外还需要提供可变 AuthConfig
class 的实例,然后 Spring 可以填充该实例:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class Config {
private ImmutableAuthConfig auth = ModifiableAuthConfig.create();
public AuthConfig getAuth() {
return auth;
}
}
随后可以通过 AuthConfig
接口对加载的配置进行任何使用,该接口不提供变异方法。
我正在尝试找到一种方法来使用 Immutables library 创建数据 classes 来保存我的 Spring 启动应用程序的配置。
我的数据配置class是:
@Value.Immutable
@JsonDeserialize(as = ImmutableAuthConfig.class)
public interface AuthConfig {
String domain();
String clientId();
@Value.Redacted
String clientSecret();
}
而主配置class设置为
@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
class 的内容可以解决问题,但我更喜欢不可变对象。有什么方法可以说服 Spring 与 Immutables 库生成的 classes 交互吗?
库对 modifiable classes 的支持提供了一种非常接近我所搜索的方法。
@Value.Modifiable
public interface AuthConfig {
String domain();
String clientId();
@Value.Redacted
String clientSecret();
}
这将创建 class ModifiableAuthConfig
,它提供满足 Spring 的 JavaBeanBinder
的接口,用于反序列化配置。
此外还需要提供可变 AuthConfig
class 的实例,然后 Spring 可以填充该实例:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class Config {
private ImmutableAuthConfig auth = ModifiableAuthConfig.create();
public AuthConfig getAuth() {
return auth;
}
}
随后可以通过 AuthConfig
接口对加载的配置进行任何使用,该接口不提供变异方法。