Spring boot 弹簧靴-@ConditionalOnProperty或@ConditionalOnExpression

Spring boot 弹簧靴-@ConditionalOnProperty或@ConditionalOnExpression,spring-boot,Spring Boot,我使用的是Spring-Boot-1.1.7。 我的意图是根据string类型属性的值向上下文添加bean 我的意思是,我可以看到很多布尔值的例子,比如: @ConditionalOnExpression("${xxx.enabled:true}") 但是我想要一个基于属性值的表达式,例如: @ConditionalOnExpression("${server.host==localhost} or ${server.port==8080} ") 或者类似的 有人能给我举个例子吗?如果要比较

我使用的是Spring-Boot-1.1.7。 我的意图是根据string类型属性的值向上下文添加bean

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

@ConditionalOnExpression("${xxx.enabled:true}")
但是我想要一个基于属性值的表达式,例如:

@ConditionalOnExpression("${server.host==localhost} or ${server.port==8080} ")
或者类似的


有人能给我举个例子吗?

如果要比较的值是一个文本,则需要引用它,并且占位符将环绕属性名(而不是整个表达式),例如,
${server.host}=='localhost'
最终,这个方法对我有效:

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

对于我使用的属性值:

@ConditionalOnProperty(name="server.host", havingValue="localhost")

如果您正在使用一个字符串值,并希望检查是否设置了一个值,您可以使用一个简单的“检查”:

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

如果要检查是否找到该组件,可以在
应用程序.yml中使用:
debug:true

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


放置您的示例以以下异常结束:“由以下原因引起:org.springframework.expression.spel.SpelEvaluationException:EL1008E:(位置0):在类型为“org.springframework.beans.factory.config.BeanExpressionContext”的对象上找不到属性或字段“localhost”-可能不是公共的?”我添加了有效的表达式(我必须说,这令人惊讶)在下面的答案。无论如何,谢谢你。是的,那会有用的(真的很明显)。您正在比较2个文本。请确认,即使其引号为${server.host}的解析是否正确?因此,如果server.host为“foobar”,则表达式的计算结果为“foobar”==“localhost”?是的,只有在引用该表达式时,才能正确执行计算。
Foo matched:
- @ConditionalOnProperty (foo.value) matched (OnPropertyCondition)
Foo: Did not match:
- @ConditionalOnProperty (foo.value) did not find property 'foo.value' (OnPropertyCondition)