Spring JdbcTemplate batchUpdate处理异常

目前我们的代码使用JdbcTemplate的batchUpdate方法来进行批量插入.

我的问题是,如果其中一个更新中的任何异常如何处理它(假设只是添加日志)并继续下一个更新sql语句?

另外,JdbcTemplate的batchUpdate()方法如何处理异常?

这里的代码片段.

    /**
     * Saves the list of <code>Item</code> objects to the database in a batch mode
     * 
     * @param objects
     *    list of objects to save in a batch mode
     */
    public void save(final List<Item> listOfItems) {

        for (List<Debit> list : listOfItems) {
            getJdbcTemplate().batchUpdate(insertItem, new ItemBatchPreparedStatementSetter(list));
        }
    }

解决方法:

how batchUpdate() method fo JdbcTemplate handles the exceptions?

批量更新行为是undefined in JDBC

If one of the commands in a batch update fails to execute properly, this method throws a BatchUpdateException, and a JDBC driver may or may not continue to process the remaining commands in the batch.

您应该使用DBMS检查此行为.

无论如何,BatchUpdateException将被spring捕获并在一些清理后作为RuntimeException重新抛出(请参阅实现细节here).

所有这些逻辑将与交易相互交织 – 例如如果insert在事务范围内,并且您通过事务边界重新抛出RuntimeException – 将回滚事务(以及所有成功插入).

因此,如果没有关于DBMS的额外知识,并且在批量插入期间出现错误的JDBC驱动程序行为,则无法有效地实现所需的“仅记录错误行”批处理逻辑.

上一篇:JDBC_Template(简化代码)


下一篇:vue中简单介绍如何使用Mock.js