trycatch外面的异常无法是try块内回滚事务
时间: 2023-08-15 10:14:57 浏览: 116
在使用try-catch块时,如果try块内发生异常,事务会自动回滚。但是,如果try-catch块外部发生异常,无法触发try块内的事务回滚。这是因为事务的回滚是由事务管理器来管理的,而事务管理器只能感知到try块内的异常。如果try-catch块外部发生异常,事务管理器无法感知到该异常,因此无法触发事务回滚。所以,如果需要在try-catch块外部回滚事务,可以在catch块中手动回滚事务,如下所示:
@Transactional(rollbackFor = Exception.class)
public void asyncJob() {
try {
success();
exception();
} catch (Exception e) {
e.printStackTrace();
// 手动回滚异常
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
在上述代码中,如果try块内的success()方法执行成功,但exception()方法抛出异常,事务会自动回滚。如果try块外部发生异常,catch块会捕获该异常,并手动回滚事务。这样可以确保在try-catch块外部发生异常时也能回滚事务。\[1\]\[3\]
#### 引用[.reference_title]
- *1* [try-catch事务不回滚](https://blog.csdn.net/dong__CSDN/article/details/126724080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [SpringBoot中try/catch异常并回滚事务(自动回滚/手动回滚/部分回滚)](https://blog.csdn.net/weixin_45476233/article/details/119613241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文