如何为Spring Integration JDBC出站通道适配器创建动态查询?
我需要创建一个由jdbc:outbound通道适配器执行的动态update语句,因为我需要使用一个case表达式设置一个字段,该表达式具有如下可变数量的条件:如何为Spring Integration JDBC出站通道适配器创建动态查询?,spring,spring-integration,spring-jdbc,Spring,Spring Integration,Spring Jdbc,我需要创建一个由jdbc:outbound通道适配器执行的动态update语句,因为我需要使用一个case表达式设置一个字段,该表达式具有如下可变数量的条件: UPDATE tableA SET fieldA = CASE WHEN fieldB IN ('a','b') THEN 1 WHEN fieldB IN ('c','d') THEN 2 ...
UPDATE tableA
SET fieldA = CASE
WHEN fieldB IN ('a','b') THEN 1
WHEN fieldB IN ('c','d') THEN 2
...
WHEN fieldB IN (...) THEN N
END
WHERE fieldC = :headers[MY_FIELDC]
"'UPDATE tableA SET fieldA = ' + headers[MY_CASE_EXP] + ' WHERE fieldC = :headers[MY_FIELDC]'"
我可以在Spring表达式中创建此动态更新语句,如下所示:
UPDATE tableA
SET fieldA = CASE
WHEN fieldB IN ('a','b') THEN 1
WHEN fieldB IN ('c','d') THEN 2
...
WHEN fieldB IN (...) THEN N
END
WHERE fieldC = :headers[MY_FIELDC]
"'UPDATE tableA SET fieldA = ' + headers[MY_CASE_EXP] + ' WHERE fieldC = :headers[MY_FIELDC]'"
但是query属性似乎不支持Spring表达式
如何生成供jdbc:outbound channel adapter使用的动态查询?为了动态创建查询,您需要使用
ExpressionEvaluationSqlParameterSourceFactory,如下所示:
<jdbc:outbound-channel-adapter data-source="dataSource" channel="outboundJdbcChannelOne"
query="UPDATE tableA SET fieldA = :something WHERE fieldC = :somethingElse"
sql-parameter-source-factory="spelSource"/>
<bean id="spelSource" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
<property name="parameterExpressions">
<map>
<entry key="something" value="headers['MY_CASE_EXP']"/>
<entry key="somethingElse" value="headers['MY_FIELDC']"/>
</map>
</property>
</bean>
有关更多详细信息,请参阅spring参考文档。我尝试过这种方法,但没有成功地使其发挥作用。它将fieldA设置为作为大小写表达式的字符串,而不是执行大小写表达式。value=“#{headers['MY_CASE_EXP']}”如何?