事务当中 try catch报错
时间: 2023-08-17 14:13:19 浏览: 57
在事务中,如果在try-catch块中捕获到异常,会导致事务失效。为了解决这个问题,可以采取以下几种方法:
1. 在@Transactional注解中添加rollbackFor属性,指定需要回滚的异常类型。例如:@Transactional(rollbackFor = Exception.class)。这样即使在try-catch块中捕获到异常,事务仍然会回滚。
2. 在catch块中手动设置事务回滚。可以使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()方法来手动回滚事务。例如:
```java
catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
log.error("异常",JsonUtil.toJSON(vo),e);
return AjaxResult.error("");
}
```
3. 在catch块中重新抛出异常。可以使用throw new RuntimeException(e)来将捕获到的异常重新抛出。这样事务会根据异常类型进行回滚。例如:
```java
catch (Exception e) {
throw new RuntimeException(e);
}
```
需要注意的是,建议在@Transactional注解中同时使用rollbackFor属性和在catch块中手动回滚或重新抛出异常的方式,以确保事务的正确回滚。\[2\]\[3\]
#### 引用[.reference_title]
- *1* [事务try catch失效解决办法](https://blog.csdn.net/letterss/article/details/114326764)[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^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [java事务中使用try catch 导致事务不回滚的问题](https://blog.csdn.net/weixin_48969356/article/details/128465039)[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^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]