Java 使用属性的Spring集成条件SpEL

Java 使用属性的Spring集成条件SpEL,java,spring-integration,spring-el,spring-properties,Java,Spring Integration,Spring El,Spring Properties,在spring头enricher的表达式字段上,有没有一种方法可以在三元表达式中使用spring属性?看起来像这样的东西: <int:header-enricher> <int:header name="DESTINATION" expression="headers['DATA'].routingKey == 'ROUTE1' ? ${route1.db} : ${route2.db}"/> </int:header-enricher> 这导致

在spring
头enricher
表达式
字段上,有没有一种方法可以在三元表达式中使用spring属性?看起来像这样的东西:

<int:header-enricher>
    <int:header name="DESTINATION" expression="headers['DATA'].routingKey == 'ROUTE1' ? ${route1.db} : ${route2.db}"/>
</int:header-enricher>

这导致出现错误,称为“意外令牌”。应该是“冒号(:”,但是是“lcurly({)”。可能我遗漏了什么。

试试看

<int:header-enricher>
    <int:header name="DESTINATION" expression="headers['DATA'].routingKey == 'ROUTE1' ? '${route1.db}' : '${route2.db}'"/>
</int:header-enricher>


试试看



意外标记的原因。应为“冒号(:)”而不是“lcurly({)”是因为属性文件中不存在属性
route1.db
,因此表达式的计算结果为
头['DATA']。routingKey='route1'?${route1.db}:一些可选的db
,留下
${route1.db}
未更改。这将导致语法错误

此外,@Hassen建议使用单引号,将属性文件中的值表示为正确的字符串。如果没有单引号,则计算表达式
headers['DATA'].routingKey==“ROUTE1”?直接db:一些可选db
将把
直接db
一些可选db
都视为Spring字段/属性,这些字段/属性甚至是错误命名的变量

最终有效表格应为:


并且假定属性文件包含以下内容:

route1.db=directdb
route2.db=一些备选数据库

计算的表达式将是:


headers['DATA'].routingKey=='ROUTE1'?'direct db':'some alternative db'
导致
意外标记的原因。应为'colon(:'),但为'lcurly({)
的原因是属性文件中不存在属性
ROUTE1.db
,因此表达式的计算结果为
headers['DATA'].routingKey=='ROUTE1'?${ROUTE1.db}:某些可选db
,保持
${ROUTE1.db}
不变。这导致语法错误

此外,@Hassen建议使用单引号,将属性文件中的值表示为正确的字符串。如果没有单引号,则计算表达式
headers['DATA'].routingKey==“ROUTE1”?直接db:一些可选db
将把
直接db
一些可选db
都视为Spring字段/属性,这些字段/属性甚至是错误命名的变量

最终有效表格应为:


并且假定属性文件包含以下内容:

route1.db=directdb
route2.db=一些备选数据库

计算的表达式将是:


headers['DATA'].routingKey=='ROUTE1'?'direct db':'some alternative db'

谢谢@Hassen!第一个建议帮助我意识到属性
ROUTE1.db
不存在。虽然这只是修复的一部分,但我会接受这个作为答案。谢谢@Hassen!第一个建议帮助我意识到属性
ROUTE1.db
不存在虽然这只是修复的一部分,但我接受这个答案。
<int:header-enricher>
    <int:header name="DESTINATION" expression="#{headers['DATA'].routingKey == 'ROUTE1' ? '${route1.db}' : '${route2.db}'}"/>
</int:header-enricher>