Spring事务的回滚策略及其代码示例
时间: 2023-07-03 20:09:27 浏览: 158
浅谈Spring中@Transactional事务回滚及示例(附源码)
5星 · 资源好评率100%
Spring事务的回滚策略有两种,分别是默认回滚和手动回滚。
默认回滚:当一个事务方法抛出一个 unchecked 异常(继承自 RuntimeException)时,Spring 默认会回滚事务。
手动回滚:在一个事务方法中,如果需要手动回滚事务,可以通过编程的方式实现,例如在 catch 块中调用 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly() 方法。
下面是一个简单的示例代码:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
@Transactional(rollbackFor = Exception.class)
public void addUser(User user) throws Exception {
try {
userDao.addUser(user);
} catch (Exception e) {
// 手动回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
throw e;
}
}
}
```
在这个示例中,当 addUser 方法抛出异常时,事务会自动回滚。如果需要手动回滚事务,可以在 catch 块中调用 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly() 方法。其中,@Transactional 注解的 rollbackFor 属性指定了需要回滚的异常类型,Exception.class 表示所有异常都会回滚。
阅读全文