@Transactional注解中的propagation属性
时间: 2023-05-20 11:00:58 浏览: 202
propagation属性用于指定事务的传播行为,它可以控制在一个方法调用另一个方法时,事务如何传播。常用的取值包括REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED和NEVER。其中,REQUIRED表示如果当前存在事务,则加入该事务,否则新建一个事务;SUPPORTS表示如果当前存在事务,则加入该事务,否则不使用事务;MANDATORY表示必须在一个已有的事务中执行,否则抛出异常;REQUIRES_NEW表示每次都会新建一个事务,不管当前是否存在事务;NOT_SUPPORTED表示不使用事务,如果当前存在事务,则将其挂起;NEVER表示不允许在事务中执行,如果当前存在事务,则抛出异常。
相关问题
@Transactional注解中的propagation属性,并写出代码
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方法时,如果当前存在事务,则会在该事务中执行,否则以非事务的方式执行。
@transactional注解propagation
@注解中的Propagation属性定义了事务的传播行为。它决定了在一个方法调用另一个被@Transaction注解的方法时,事务是如何被传播的。常见的Propagation属性值有以下几种:
1. REQUIRED:默认值。如果当前没有事务存在,则创建一个新的事务并在其中执行方法,如果有事务存在,则加入该事务并在其中执行方法。
2. REQUIRES_NEW:每次都创建一个新的事务,并在其中执行方法,如果当前有事务存在,则将其挂起。
3. SUPPORTS:如果当前有事务存在,则加入该事务并在其中执行方法,如果当前没有事务存在,则以非事务的方式执行方法。
4. MANDATORY:必须在一个事务中执行方法,如果当前没有事务存在,则抛出异常。
5. NOT_SUPPORTED:以非事务的方式执行方法,如果当前有事务存在,则将其挂起。
根据不同的Propagation属性,@Transactional注解可以控制事务的传播行为,从而实现不同的事务管理策略。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [@Transactional中的propagation属性](https://blog.csdn.net/windflybird/article/details/101775113)[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_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文