@Transactional 的事务
时间: 2023-12-06 16:38:06 浏览: 82
@Transactional是Spring框架中用于管理事务的注解。在Spring中,我们可以使用@Transactional注解来标记一个方法需要被事务管理器管理。当一个被@Transactional注解标记的方法被调用时,Spring会自动开启一个事务,然后在方法执行完毕后根据方法执行情况决定是提交事务还是回滚事务。
@Transactional注解有多个属性,其中propagation是其中一个重要的属性。propagation用于指定事务的传播行为,即在一个方法调用其他方法时,事务应该如何传播。常用的propagation属性值包括:
- REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入这个事务。- REQUIRES_NEW:不管当前是否存在事务,都会新建一个事务,并在该方法执行完毕后提交该事务。
- SUPPORTS:如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务的方式执行。
- MANDATORY:必须在一个已有的事务中执行,否则抛出异常。
- NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
- NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
- NESTED:如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则新建一个事务。
下面是一个使用@Transactional注解的例子:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Transactional(propagation = Propagation.REQUIRED)
public void addUser(User user) {
userDao.addUser(user);
}
@Transactional(propagation = Propagation.REQUIRED)
public void updateUser(User user) {
userDao.updateUser(user);
}
@Transactional(propagation = Propagation.REQUIRED)
public void deleteUser(int userId) {
userDao.deleteUser(userId);
}
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public User getUserById(int userId) {
return userDao.getUserById(userId);
}
}
```
阅读全文