@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
时间: 2023-11-11 13:45:11 浏览: 158
这段代码使用了@Transactional注解,并设置了以下属性:
- propagation属性设置为SUPPORTS,表示如果当前没有事务,就以非事务方式执行;如果当前存在事务,则加入当前事务中。
- readOnly属性设置为true,表示该方法只读,不会对数据库进行修改操作。
- rollbackFor属性设置为Exception.class,表示如果发生Exception及其子类的异常,则回滚事务。
请问还有什么其他问题吗?
相关问题
@Transactional(readOnly=true, propagation=Propagation.SUPPORTS)
@Transactional(readOnly=true, propagation=Propagation.SUPPORTS) 是一个用于事务管理的注解。它指示方法是只读的,并且在调用该方法时,如果事务存在,则支持该事务的传播。这意味着如果当前存在一个事务,则该方法会在该事务中运行;如果没有事务,则该方法会以非事务方式运行。
@Transactional 的事务
@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);
}
}
```
阅读全文
相关推荐
















