仅当属性为false或未定义时才如何加载Bean?

时间:2019-02-24 17:35:55

标签: java spring spring-boot spring-bean spring-properties

我有一个bean,仅当属性为false或未定义时才应加载。如果我用以下注释:

@ConditionalOnProperty(prefix = "myFeature1", name = "enable", havingValue = "false")

属性myFeature1.enable必须显式设置为false。在@ConfigurationProperties注释的类中,此属性被定义为具有默认值的布尔值,但是在应用程序启动时,此注释似乎处理得太晚,因此必须将myFeature1.enable属性用作字符串。来自Environment

我尝试添加注释:

@ConditionalOnProperty(prefix = "dlcm.module.auth", name = "enable", matchIfMissing = true)

但是@ConditionalOnProperty不是可重复的注释。

我也尝试使用@ConditionalOnExpression

@ConditionalOnExpression("'${dlcm.module.auth.enable}' == 'false' or '${dlcm.module.auth.enable}' == ''")

但该属性占位符似乎被空字符串以外的其他内容代替。

所以我的问题是:仅当属性为false或未定义时,如何加载bean?

1 个答案:

答案 0 :(得分:0)

解决方案是在属性占位符中使用带有默认值的@ConditionalOnExpression批注:

@ConditionalOnExpression("'${dlcm.module.auth.enable:false}' == 'false'")