Question:
How can I use Spring Expression Language to check that 2 Boolean properties are true?
For example, checking that a single
As far as i remember, You could use this kind of expression:
@ConditionalOnExpression("'${com.property1}'.equals('${com.property2}')")
for further reading here is the link
if it was helpful, please do comment so that my confusion may also get cleared.
The annotations @ConditionalOnProperty
and @ConditionalOnExpression
both do NOT have the java.lang.annotation.Repeatable
annotation so you would not be able to just add multiple annotations for checking multiple properties.
The following syntax has been tested and works:
Solution for Two Properties
@ConditionalOnExpression("${properties.first.property.enable:true} && ${properties.second.property.startServer:false}")
Note the following:
It allows for multiple properties that have differing values and can extend to multiple properties.
If you want to check more then 2 values and still maintain readability, you can use the concatenation operator between different conditions you are evaluating:
Solution for more then 2 properties
@ConditionalOnExpression("${properties.first.property.enable:true} " +
"&& ${properties.second.property.enable:true} " +
"&& ${properties.third.property.enable:true}")
The drawback is that you cannot use a matchIfMissing argument as you would be able to when using the @ConditionalOnProperty
annotation so you will have to ensure that the properties are present in the .properties or YAML files for all your profiles/environments or just rely on the default value