JdbcMessageHandler 批量更新 - 不要在一个错误上取消所有内容

JdbcMessageHandler batch update - not to cancel everything on one error

假设 payload() 是包含 n 项的 ArrayList,其中一项具有 pk 重复值(已存在于 table 中并导致重复违规)。

发生这种情况时,none 个其他有效项目将插入到数据库中。
批量操作是否可能会插入有效的(并且只会将有问题的项目推送到 errorChannel)?

@Bean
@ServiceActivator(inputChannel=..)
public MessageHandler jdbcMessageHandler() {
    JdbcMessageHandler jdbcMessageHandler = new JdbcMessageHandler(dataSource, "INSERT INTO...");
    jdbcMessageHandler.setPreparedStatementSetter((ps, message) ->...

  return...
}

不,这样的假设只是违反了批量插入的目的:全有或全无。

您可以考虑 split 预先列出并在 JdbcMessageHandler 中添加一个 ExpressionEvaluatingRequestHandlerAdvice 来处理个别错误。

在文档中查看有关建议请求处理程序的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#message-handler-advice-chain