Spring boot - @ConditionalOnProperty或@ConditionalOnExpression

时间:2014-10-19 14:07:50

标签: spring-boot

我使用的是Spring-Boot-1.1.7。 我的目的是根据string类型的属性值将bean添加到我的上下文中。

我的意思是,我可以看到很多布尔值的例子,例如:

@ConditionalOnExpression("${xxx.enabled:true}")

但我想要一个基于属性值的表达式,例如:

@ConditionalOnExpression("${server.host==localhost} or ${server.port==8080} ")

或类似的东西。

有人能告诉我一个如何做的例子吗?

4 个答案:

答案 0 :(得分:21)

对于属性值条件我使用:

function buildList(list) {
    var result = [];
    for (var i = 0; i < list.length; i++) {
        var item = 'item' + list[i];
        result[i] = function(x) {
            result.push( function() {alert(item + ' ' + list[x])} );   
        }(i);
    }
    return result;
}

答案 1 :(得分:17)

最终,这个对我有用:

@ConditionalOnExpression("'${server.host}'=='localhost'")

答案 2 :(得分:1)

如果要比较的值是文字,则需要引用它,占位符将围绕属性名称(而不是整个表达式),例如${server.host}=='localhost'

答案 3 :(得分:0)

如果您使用的是字符串值并要检查是否设置了,您可以使用简单的“检查”:

@Component
@ConditionalOnProperty(value = "foo.value")
public class Foo {
    private String value;
    // getter/ setter and other stuff ...
}

如果您将foo.value: bar添加到application.yml文件中,则会找到该组件并将其添加到应用程序上下文中,但是如果设置一个值,则组件将不添加。

如果要检查是否找到了组件,可以在debug: true中使用:application.yml

Foo matched:
- @ConditionalOnProperty (foo.value) matched (OnPropertyCondition)

vs

Foo: Did not match:
- @ConditionalOnProperty (foo.value) did not find property 'foo.value' (OnPropertyCondition)