Reputation: 2355
I'm using Spring-Boot-1.1.7. My intention is to add a bean to my context according to a value of a property of type string.
I mean, I can see a lot of examples of boolean values such as this:
@ConditionalOnExpression("${xxx.enabled:true}")
But I want an expression based on a value of a property, for example:
@ConditionalOnExpression("${server.host==localhost} or ${server.port==8080} ")
or something like that.
Can someone show me an example how to do it?
Upvotes: 30
Views: 56049
Reputation: 1710
If you are using e.g. a string value and want to check if a value is set, you can use a simple "check":
@Component
@ConditionalOnProperty(value = "foo.value")
public class Foo {
private String value;
// getter/ setter and other stuff ...
}
If you add: foo.value: bar
to your application.yml
file the component will be found and added to the application context, but if you do not set a value the component will not be added.
If you want to check if the component is found, you can use: debug: true
in your application.yml
.
Foo matched:
- @ConditionalOnProperty (foo.value) matched (OnPropertyCondition)
vs
Foo: Did not match:
- @ConditionalOnProperty (foo.value) did not find property 'foo.value' (OnPropertyCondition)
Upvotes: 0
Reputation: 4236
For property value conditional I used:
@ConditionalOnProperty(name="server.host", havingValue="localhost")
Upvotes: 37
Reputation: 2355
Eventually , this one worked for me:
@ConditionalOnExpression("'${server.host}'=='localhost'")
Upvotes: 46
Reputation: 58094
If the value you want to compare with is a literal, you need to quote it, and the placeholder would go round the property name (not the whole expression), e.g. ${server.host}=='localhost'
Upvotes: 2