@Transactional注解中的propagation属性,并写出代码
时间: 2023-05-20 11:00:45 浏览: 168
propagation属性指定了事务的传播行为,即当一个事务方法被另一个事务方法调用时,当前事务如何传播到被调用的方法中。常用的取值有:
- REQUIRED:默认值,如果当前存在事务,则加入该事务,否则新建一个事务。
- SUPPORTS:如果当前存在事务,则加入该事务,否则以非事务的方式执行。
- MANDATORY:必须在一个已有的事务中执行,否则抛出异常。
- REQUIRES_NEW:必须开启一个新的事务执行,如果当前存在事务,则挂起当前事务。
- NOT_SUPPORTED:以非事务的方式执行操作,如果当前存在事务,则挂起当前事务。
- NEVER:以非事务的方式执行操作,如果当前存在事务,则抛出异常。
- NESTED:如果当前存在事务,则在嵌套事务中执行,否则新建一个事务。
下面是一个使用@Transactional注解的示例代码:
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
@Transactional(propagation = Propagation.REQUIRED)
public void addUser(User user) {
userDao.addUser(user);
}
@Override
@Transactional(propagation = Propagation.REQUIRED)
public void updateUser(User user) {
userDao.updateUser(user);
}
@Override
@Transactional(propagation = Propagation.REQUIRED)
public void deleteUser(int userId) {
userDao.deleteUser(userId);
}
@Override
@Transactional(propagation = Propagation.SUPPORTS)
public User getUser(int userId) {
return userDao.getUser(userId);
}
}
```
在上面的代码中,@Transactional注解被用于类的方法上,propagation属性被设置为REQUIRED,表示如果当前存在事务,则加入该事务,否则新建一个事务。这样,在调用addUser、updateUser和deleteUser方法时,都会在一个事务中执行。而getUser方法的propagation属性被设置为SUPPORTS,表示如果当前存在事务,则加入该事务,否则以非事务的方式执行。这样,在调用getUser方法时,如果当前存在事务,则会在该事务中执行,否则以非事务的方式执行。
阅读全文