Spring 使用属性集成条件 SpEL
Spring Integration Conditional SpEL using Properties
有没有办法在 Spring header-enricher
的 expression
字段的三元表达式中使用 spring 属性?看起来像这样的东西:
<int:header-enricher>
<int:header name="DESTINATION" expression="headers['DATA'].routingKey == 'ROUTE1' ? ${route1.db} : ${route2.db}"/>
</int:header-enricher>
这导致错误 Unexpected token. Expected 'colon(:)' but was 'lcurly({)'
。也许我错过了什么。
尝试
<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>
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 fields/properties,它们甚至是错误命名的变量开头。
最终的有效形式应该是:
<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'
有没有办法在 Spring header-enricher
的 expression
字段的三元表达式中使用 spring 属性?看起来像这样的东西:
<int:header-enricher>
<int:header name="DESTINATION" expression="headers['DATA'].routingKey == 'ROUTE1' ? ${route1.db} : ${route2.db}"/>
</int:header-enricher>
这导致错误 Unexpected token. Expected 'colon(:)' but was 'lcurly({)'
。也许我错过了什么。
尝试
<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>
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 fields/properties,它们甚至是错误命名的变量开头。
最终的有效形式应该是:
<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'