我使用Sping Boot 应用程序和Java8。
问题描述
最常见的需要是创建多个my.externalsystem.connection属性的Java表示,并使用@ConfigurationProperties注解将它们分组。我有application.properties文件,该文件目前缺少任何my.externalsystem.connection
属性来模拟错误的配置(有人忘记将属性放在属性文件中,然后应该使用默认的属性值)。缺少的特定属性是my.externalsystem.connection.enabled=false (default should be true)
将来会有更多前缀为my.externalsystem.connection
的属性。
因为会有很多my.externalsystem.connection
属性,我会像下面的Java对象一样创建属性组:
我的Java类表示属性:
@Configuration
@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
对象在运行时为null。为什么它没有使用默认值创建?我需要这个类使用默认值(my.externalsystem.connection.enabled
的true是默认值)。
有人能帮忙吗?先谢了。
1条答案
按热度按时间9avjhtql1#
您将缺少
ConnectionProperties
的默认构造函数来示例化类并Map属性(如果缺少)。不确定是否或如何使用
@NoArgsConstructor
和@AllArgsConstructor
将其转换为Lombok,但这应该可以工作:在这个例子中,如果属性丢失,它将只使用构造函数的默认值,如果属性存在,它将覆盖它。