spring事务 的传播行为,及其代码示例
时间: 2023-07-19 22:05:10 浏览: 51
Spring事务的传播行为是指在多个事务方法之间进行事务管理时,不同方法之间的事务如何进行传播。Spring定义了7种传播行为,分别是:
1. PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常用的选项。
2. PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
3. PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
4. PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
5. PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6. PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7. PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
以下是一个示例代码,演示了如何使用Spring事务的传播行为:
```
@Service
public class 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.REQUIRED)
public void transferMoney(int fromUserId, int toUserId, double money) {
User fromUser = userDao.getUserById(fromUserId);
User toUser = userDao.getUserById(toUserId);
fromUser.setBalance(fromUser.getBalance() - money);
userDao.updateUser(fromUser);
toUser.setBalance(toUser.getBalance() + money);
userDao.updateUser(toUser);
}
}
```
在以上示例中,我们定义了一个UserService类,在其中定义了四个方法,每个方法都使用了Spring事务的传播行为。其中addUser、updateUser和deleteUser方法都是简单的增删改操作,使用了Propagation.REQUIRED传播行为。而transferMoney方法是一个转账操作,需要同时修改两个用户的余额,所以使用了Propagation.REQUIRED传播行为,以保证转账操作是一个整体,要么全部成功,要么全部失败。