PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就抛出异常
时间: 2023-08-11 09:22:50 浏览: 44
PROPAGATION_REQUIRED 是 Spring 事务传播行为中的一种。它的含义是:如果当前存在事务,则加入该事务,如果当前不存在事务,则开启一个新的事务。
具体来说,如果一个方法使用 PROPAGATION_REQUIRED 传播行为进行事务控制,那么当该方法被另一个使用事务的方法调用时,它会加入到该事务中执行;当该方法被非事务方法调用时,它会开启一个新的事务来执行。
在使用 PROPAGATION_REQUIRED 传播行为时,如果当前不存在事务,则会开启一个新的事务;如果当前存在事务,则会加入到该事务中执行。如果在执行过程中发生异常,Spring 事务管理器会回滚事务,并抛出事务异常。
PROPAGATION_REQUIRED 传播行为通常用于增删改等更新操作,因为这些操作需要对数据库进行修改,需要使用事务来保证数据的一致性和完整性。通过使用 PROPAGATION_REQUIRED 传播行为,可以保证多个更新操作在同一个事务中执行,从而保证数据的一致性和完整性。
相关问题
23.下面有关Spring的事务传播特性,说法错误的是() ☆ 【单选】 A. PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行 B. PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就抛出异常 C. PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起 D. PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作
B. PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就抛出异常 是错误的说法。PROPAGATION_REQUIRED表示支持当前事务,如果当前没有事务,就新建一个事务。如果被调用方存在事务,则加入该事务中,否则新建一个事务。如果该事务被外层事务包裹,则被外层事务控制提交或回滚。
spring事务 的传播行为PROPAGATION_NESTED:,及其代码示例
PROPAGATION_NESTED 表示在当前事务中创建一个嵌套的事务,如果存在当前事务,则当前事务作为主事务,新的嵌套事务作为子事务,子事务可以独立提交或回滚,但是主事务提交时会提交所有的子事务,主事务回滚时会回滚所有的子事务。
以下是使用 PROPAGATION_NESTED 的代码示例:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Transactional(propagation = Propagation.REQUIRED)
public void updateUser(User user) {
userDao.update(user);
try {
// 在当前事务中创建一个嵌套的事务
addScore(user.getId(), 10);
} catch (Exception e) {
e.printStackTrace();
}
}
@Transactional(propagation = Propagation.NESTED)
public void addScore(Long userId, int score) {
userDao.addScore(userId, score);
if (score == 10) {
throw new RuntimeException("score is 10, rollback...");
}
}
}
```
在 updateUser 方法中,使用 PROPAGATION_REQUIRED 开启一个事务,同时调用了 addScore 方法,在 addScore 方法中使用 PROPAGATION_NESTED 开启一个嵌套的事务。当 addScore 方法中抛出异常时,只会回滚嵌套事务,不会影响主事务。当 updateUser 方法中抛出异常时,会回滚主事务,同时也会回滚嵌套事务。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)