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
假设 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