使用Properties的Spring Integration Conditional SpEL

时间:2016-09-16 03:24:07

标签: java spring-integration spring-el spring-properties

有没有办法在Spring expression的{​​{1}}字段的三元表达式中使用spring属性?看起来像这样:

header-enricher

这导致错误<int:header-enricher> <int:header name="DESTINATION" expression="headers['DATA'].routingKey == 'ROUTE1' ? ${route1.db} : ${route2.db}"/> </int:header-enricher> 。也许我错过了什么。

2 个答案:

答案 0 :(得分:3)

尝试

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

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

答案 1 :(得分:1)

Unexpected token. Expected 'colon(:)' but was 'lcurly({)'的原因是属性文件中不存在属性route1.db,因此表达式被评估为headers['DATA'].routingKey == 'ROUTE1' ? ${route1.db} : some-alternative-db,保持${route1.db}不变。这导致语法错误。

此外,@ Hassen建议使用单引号将属性文件中的值呈现为正确的字符串。如果没有它,评估的表达式headers['DATA'].routingKey == 'ROUTE1' ? direct-db : some-alternative-db会将direct-dbsome-alternative-db都视为Spring字段/属性,这些字段/属性甚至会以错误命名的变量开头。

最终有效表格应为:

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

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

route1.db=direct-db route2.db=some-alternative-db

评估的表达式为:

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