JdbcMessageHandler 批量更新 - 不要在一个错误上取消所有内容
Posted
技术标签:
【中文标题】JdbcMessageHandler 批量更新 - 不要在一个错误上取消所有内容【英文标题】:JdbcMessageHandler batch update - not to cancel everything on one error 【发布时间】:2021-04-29 18:46:36 【问题描述】:假设payload()
是具有 n 项的 ArrayList,其中一项具有 pk 重复值(表中已存在并导致重复违规)。
发生这种情况时,没有其他有效项目插入数据库。 批处理操作是否有可能会插入有效的(并且只会推送到 errorChannel 有问题的项目)?
@Bean
@ServiceActivator(inputChannel=..)
public MessageHandler jdbcMessageHandler()
JdbcMessageHandler jdbcMessageHandler = new JdbcMessageHandler(dataSource, "INSERT INTO...");
jdbcMessageHandler.setPreparedStatementSetter((ps, message) ->...
return...
【问题讨论】:
【参考方案1】:不,在这样的假设下,您只是违反了批量插入的目的:全有或全无。
您可以考虑将split
预先列出并在该JdbcMessageHandler
中添加ExpressionEvaluatingRequestHandlerAdvice
以处理个别错误。
在文档中查看有关建议请求处理程序的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#message-handler-advice-chain
【讨论】:
怀疑批处理是这样的。谢谢以上是关于JdbcMessageHandler 批量更新 - 不要在一个错误上取消所有内容的主要内容,如果未能解决你的问题,请参考以下文章