如何将数组作为单个有效负载发送到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);
答案 0 :(得分:0)
实际上,对substituteNamedParameters
子句IN
,参数必须为Collection
而不是array
。 NamedParameterJdbcTemplate.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"
。