spring事务 的传播行为PROPAGATION_MANDATORY:,及其代码示例
时间: 2023-07-19 14:05:25 浏览: 108
PROPAGATION_MANDATORY 表示当前方法必须运行在一个已经存在的事务中,如果当前不存在事务,则会抛出异常。该传播行为通常用于需要依赖于外部事务的场景,例如在某个业务流程中需要依赖于上一级的事务进行操作。
以下是 PROPAGATION_MANDATORY 的示例代码:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private TransactionTemplate transactionTemplate;
@Override
@Transactional(propagation = Propagation.MANDATORY)
public void updateUser(User user) {
userMapper.updateUser(user);
}
@Override
public void updateUserWithTransaction(User user) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
try {
updateUser(user);
} catch (Exception e) {
status.setRollbackOnly();
throw e;
}
}
});
}
}
```
在上述代码中,updateUser 方法使用 PROPAGATION_MANDATORY 传播行为进行事务管理,确保在调用该方法时已经存在事务。而 updateUserWithTransaction 方法则通过 TransactionTemplate 手动开启事务,并在事务中调用 updateUser 方法,以便实现对 updateUser 方法的事务控制。
阅读全文