@Transactional 注解主动回滚
时间: 2023-08-23 11:16:49 浏览: 54
@Transactional注解可以用来标记一个方法需要在出现异常时进行事务的回滚。然而,有时候我们可能需要手动触发事务的回滚。为了实现手动回滚,我们可以使用两个步骤。首先,在注解上添加rollbackFor属性,指定需要回滚的异常类型,例如:@Transactional(rollbackFor=Exception.class)。其次,在我们自己的异常处理中手动触发回滚,可以使用如下代码:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();。这样,当我们捕获到异常时,就可以手动触发事务的回滚操作。
相关问题
@Transactional 主动回滚
@Transactional 注解可以用于控制事务的提交和回滚。当一个方法被 @Transactional 注解修饰时,如果该方法执行过程中发生了异常,则事务会自动回滚,即所有对数据库的操作都会撤销,回到该方法执行前的状态。
例如,以下代码中的 saveUser 方法使用了 @Transactional 注解,当插入用户数据时发生异常,事务会自动回滚,不会插入任何数据到数据库中。
```
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void saveUser(User user) {
userDao.insertUser(user);
throw new RuntimeException("插入用户数据失败");
}
}
```
@Transactional是如何回滚的
@Transactional注解在Spring框架中用于实现事务管理。它的回滚机制涉及到抛出异常的类型。默认情况下,@Transactional注解只对抛出的RuntimeException异常进行回滚。 如果在@Transactional注解中指定了rollbackFor属性,那么抛出rollbackFor属性指定的异常类型时,事务也会进行回滚。 在@Transactional注解中使用了rollbackFor=Exception.class时,无论抛出的是checked异常还是unchecked异常,事务都会进行回滚。 因此,只要在被@Transactional注解标记的方法中抛出了RuntimeException或rollbackFor属性指定的异常类型,事务就会回滚。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [注释@Transactional如何回滚?](https://blog.csdn.net/dituirenwu/article/details/129224517)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [Spring中@Transactional事务回滚](https://blog.csdn.net/xiaojin21cen/article/details/83507174)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]