Java 使用Spring表达式语言断言从属性文件加载的属性(带有逗号分隔值)是否包含;“价值”;

Java 使用Spring表达式语言断言从属性文件加载的属性(带有逗号分隔值)是否包含;“价值”;,java,spring-boot,spring-expression-language,Java,Spring Boot,Spring Expression Language,我有以下问题,我在spring boot中有一个特定的配置类,它包含bean,我只希望在具有值列表的特定属性包含特定值时创建该类 现在,configuration类看起来如下所示: @ConditionalOnExpression(“{'${conditions.values.options}.”包含('scenarione')}”) 塞纳里奥酮的配置{ @豆子 public StudentBean getStudentBean(){ ... } } 在属性文件中,我会有如下内容: condi

我有以下问题,我在spring boot中有一个特定的配置类,它包含bean,我只希望在具有值列表的特定属性包含特定值时创建该类

现在,configuration类看起来如下所示:

@ConditionalOnExpression(“{'${conditions.values.options}.”包含('scenarione')}”)
塞纳里奥酮的配置{
@豆子
public StudentBean getStudentBean(){
...
}
}
在属性文件中,我会有如下内容:

conditions.values.options=${CONDITIONS_VALUES_OPTIONS}
然后在运行时提供
条件\u值\u选项的值,如下所示:

-DCONDITIONS_VALUES_OPTIONS=ScenarioOne,ScenarioTwo,ScenarioFive
我之所以希望这样做,是为了能够部署应用程序,并根据运行时给定的值使用不同的bean

我将有几个这样的配置类,它们将根据传递这些属性中的哪些属性来创建。 为了实现这一点,我试图依靠Spring表达式语言来完成以下工作: 1-读取属性
条件.值.选项
,然后将其转换为列表,然后验证列表是否包含所需的配置字符串

到目前为止,我尝试了几种表达方式,包括:

@ConditionalOnExpression("#{'${conditions.values.options}'.contains('ScenarioOne')}")

和其他类似的表达,没有运气。有人能帮我看看我这里缺少什么吗?

你能试着这样写你的注释值并检查一下:

@ConditionalOnExpression("#{${conditions.values.options}}.contains('ScenarioOne')")

在花括号后写contains方法。

我使用以下方法获得了所需的行为:

@ConditionalOnExpression("#{T(java.util.Arrays).asList('${conditions.values.options}').contains('ScenarioOne')}")
因此,稍微剖析一下这一点,希望能帮助其他可能遇到类似问题的人: spring似乎以数组的形式读取逗号分隔的属性,这是假的,因为可以使用spring boot执行以下操作:

以下两种说法是有效的:

@Value("${property.with.comma.separated.values}")
private List<String> prop;
现在表达:

"#{'${conditions.values.options}'.contains('ScenarioOne')}"
将抛出一个错误,指出数组类不包含名为“.contains()的方法” 因此,这就是为什么我不得不使用一些方法执行:

T(java.util.Arrays).asList('${conditions.values.options}')
要读取逗号分隔的值,请将字符串数组转换为列表,然后执行“.contains(..)”方法调用

我希望有一种更简单的方法来实现它,在那里必须进行方法调用,这似乎有些过分了


我对建议持开放态度感谢您的响应,它不起作用,它在.contains(…)上的“.”读取:意外“.”之后立即产生语法错误
T(java.util.Arrays).asList('${conditions.values.options}')