min*_*nil 3 spring jdbc spring-jdbc jdbctemplate batch-updates
目前我们的代码使用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));
}
}
Run Code Online (Sandbox Code Playgroud)
JdbcTemplate的batchUpdate()方法如何处理异常?
JDBC中未定义批量更新行为:
如果批量更新中的某个命令无法正确执行,则此方法将抛出BatchUpdateException,并且JDBC驱动程序可能会也可能不会继续处理批处理中的其余命令.
您应该使用DBMS检查此行为.
无论如何,BatchUpdateException在一些清理之后,将被Spring捕获并作为RuntimeException重新抛出(请参阅此处的实现细节).
所有这些逻辑都将与事务交织在一起 - 例如,如果insert在事务范围内并且您RuntimeException通过事务边界重新抛出- 事务(以及所有成功插入事务)将被回滚.
因此,如果没有关于DBMS的额外知识,并且在批量插入期间出现错误的JDBC驱动程序行为,则无法有效地实现所需的"仅日志错误行"批处理逻辑.
| 归档时间: |
|
| 查看次数: |
12485 次 |
| 最近记录: |