我正试图建立一个 @ConditionalExpression
使用以下环境变量:
@ConditionalOnExpression("#{systemEnvironment['PUBLIC']?:'false'} != true")
我可以在以下代码中看到这一点:
private Boolean evaluateExpression(ConfigurableListableBeanFactory beanFactory, String expression) {
BeanExpressionResolver resolver = beanFactory.getBeanExpressionResolver();
if (resolver == null) {
resolver = new StandardBeanExpressionResolver();
}
BeanExpressionContext expressionContext = new BeanExpressionContext(beanFactory, null);
Object result = resolver.evaluate(expression, expressionContext);
return (result != null && (boolean) result);
}
问题是 resolver.evaluate(expression, expressionContext);
退货 false != true
这应该是一个 boolean
:
return (result != null && (boolean) result);
所以这总是失败的 ClassCastException
.
我也试着用不同的方式引用和 Package 它 ${…}
,但结果总是一样的。
问题是:我的条件表达式有什么问题?
1条答案
按热度按时间yfwxisqw1#
一种解决方案是这样的表达:
需要补充的是,如果这个问题不是出于调查目的,而是为了找到改进真实(类似产品)代码的方法,我真的建议您:
总是尽量简化这种表达式,因为当你看到大量的布尔比较、默认值等时,很难理解真正发生的事情;
更多使用spring boot特定的东西:
使用布尔表达式时,通常可以替换
@ConditionalOnExpression
与@ConditionalOnProperty
(可选)matchIfMissing
参数);当您需要读取环境变量时,您可以使用宽松绑定特性,而不是使用(主要是)前spring引导时代的东西,比如
systemProperties
/systemEnvironment
.