Spring 集成 JdbcMessageHandler - 包含多个项目的负载

Spring Integration JdbcMessageHandler - payload with multiple items

如何处理负载中的多条消息?

我尝试了以下方法:

@Bean
@ServiceActivator(inputChannel = "outChannel")
 public MessageHandler jdbcMessageHandler() {
    JdbcMessageHandler jdbcMessageHandler = new JdbcMessageHandler(getDataSource(), getSql());

     jdbcMessageHandler.setPreparedStatementSetter((ps, message) -> {
            Item[] items = ((Item[]) message.getPayload());
            Arrays.stream(items).forEach(item -> {                
                    ps.setString(1, item.getName());
            }
            ps.addBatch();
    } 
    return jdbcMessageHandler;
}
 

但多次插入最后一条消息。 (注意:对 bean 使用 java 配置而不是 xml)

查看文档:https://docs.spring.io/spring-integration/reference/html/jdbc.html#batch-update

the JdbcMessageHandler performs a JdbcOperations.batchUpdate() if the payload of the request message is an Iterable instance.

Iterable,不是我在您的示例中看到的数组。因此,考虑将您的数组转换为 List,您应该能够同时处理多个项目的批量更新。