我对许多数据做了一些处理,所以我做了一个循环。
@Transactional
@Override
public void processPayment(List<Long> paymentsId, PaymentModeEnum paymentMode) throws ProcessPaymentException{
...
processCreditCardPayment(payments);
}
private void processCreditCardPayment(List<Payment> payments) throws ProcessPaymentException {
for (Payment payment : payments) {
try {
//save to db
}catch (ProcessPaymentException ppe) {
}
}
}ProcessPaymentException扩展异常
如果我在10个项目上循环,在最后一个项目上,错误发生了。所有内容都已回滚(我的所有项目),还是只有一个出错?
发布于 2017-01-04 12:35:55
在这种情况下,不会回滚任何内容。这是因为您捕获了异常,而它没有通过Spring事务边界。
Read here in Spring Docs
向Spring Framework的事务基础设施指示事务的工作将被回滚的推荐方法是从当前在事务上下文中执行的代码中抛出异常。Spring Framework的事务基础结构代码将在调用栈冒泡时捕获任何未处理的异常,并决定是否将事务标记为回滚。
https://stackoverflow.com/questions/41452825
复制相似问题