ConfigurationProperties -如何使用组和默认属性值创建配置



我使用的是Spring Boot应用程序和Java8。

问题描述

最一般的需求是创建多个my.externalsystem.connection属性的Java表示,并使用@ConfigurationProperties注释对它们进行分组。我有申请。属性文件,目前缺少任何my.externalsystem.connection属性来模拟错误的配置(有人忘记在属性文件中放置属性,然后应该使用默认属性值)。具体缺少的属性是my.externalsystem.connection.enabled=false (default should be true),将来会有更多的属性以my.externalsystem.connection为前缀。

因为将有许多my.externalsystem.connection属性,我将创建属性组,就像下面的Java对象:

我的Java类表示属性:

@Configuration
@Component
@ConfigurationProperties(prefix = "my.externalsystem")
@Getter
@Setter
public class MyConfiguration {
private ConnectionProperties connection;
@Getter
@Setter
public static class ConnectionProperties {
public ConnectionProperties (@DefaultValue("true") boolean enabled) {
this.enabled = enabled;
}
private boolean enabled;
}
}

运行时的问题

当我在属性文件中使用my.externalsystem.connection.enabled=true or false运行它时,它正确地读取值并且一切正常工作。但是,当属性文件中缺少my.externalsystem.connection.enabled时,connection对象在运行时为空。为什么不使用默认值创建它?我需要这个类的工作与默认值(true为my.externalsystem.connection.enabled是默认值)。

有人能帮忙吗?提前谢谢。

您缺少ConnectionProperties的默认构造函数来实例化类并在缺少时映射属性。

不确定是否或如何用@NoArgsConstructor@AllArgsConstructor将其转换为龙目鱼,但这应该可以工作:

@Configuration
@ConfigurationProperties(prefix = "my.externalsystem")
@Getter
@Setter
public class MyConfiguration {
private ConnectionProperties connection = new ConnectionProperties();
@Getter
@Setter
public static class ConnectionProperties {
private boolean enabled;
public ConnectionProperties() {
this.enabled = true;
}
}
}

在这个例子中,如果属性缺失,它将使用构造函数的默认值,如果属性存在,它将覆盖它。

最新更新