Spring Integration:如何将数组作为单个有效负载发送到jdbc:outbound网关

时间:2014-04-06 18:14:39

标签: spring-integration

如何将数组作为单个有效负载发送到Spring Integration的jdbc:outbound网关? 我正在构建一个字符串数组并将其发送到接口方法。但是,SQL接受一个参数":payload"并且它因UncategorizedSQLException而失败。

出站网关的Sql查询如下

<int-jdbc:outbound-gateway data-source="dataSource"   request-channel="requestChannel" 
                           query="select XMLMSG from Table where SEQ_ID in (:payload)"                                
                           reply-channel="replyChannel" > 

</int-jdbc:outbound-gateway>

serviceinterface.findBySequenceIds(sequenceIdStringArray);

1 个答案:

答案 0 :(得分:0)

实际上,对substituteNamedParameters子句IN,参数必须为Collection而不是arrayNamedParameterJdbcTemplate.substituteNamedParameters的源代码:

if (value instanceof Collection) {
    Iterator<?> entryIter = ((Collection<?>) value).iterator();
    int k = 0;
        while (entryIter.hasNext()) {
    if (k > 0) {
        actualSql.append(", ");
        }

......
      actualSql.append("?");

因此,只需从字符串中构建List,而不是array

Arrays.asList("foo", "bar", "baz");

您真正的疑问将是:

select XMLMSG from Table where SEQ_ID in (?, ?, ?)

JdbcTemplate将为您做的其他工作。

<强>更新

注意,默认情况下<int-jdbc:outbound-gateway/>仅选择一条记录。要摆脱此限制,请指定max-rows-per-poll="0"