有没有办法在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>
。也许我错过了什么。
答案 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-db
和some-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'