springboot编程式事务
时间: 2023-06-17 21:05:02 浏览: 111
Spring Boot 提供了编程式事务管理的方式,使得我们可以在代码中手动控制事务的开启、提交或回滚。
使用编程式事务需要使用 Spring 提供的 TransactionTemplate 类。它提供了一个 execute() 方法,在其中可以编写事务代码。
下面是一个示例:
```java
@Service
public class UserService {
@Autowired
private TransactionTemplate transactionTemplate;
@Autowired
private UserMapper userMapper;
public void transferMoney(int fromUserId, int toUserId, double money) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
try {
// 扣除转账用户余额
User fromUser = userMapper.selectById(fromUserId);
fromUser.setBalance(fromUser.getBalance() - money);
userMapper.updateById(fromUser);
// 增加接收转账用户余额
User toUser = userMapper.selectById(toUserId);
toUser.setBalance(toUser.getBalance() + money);
userMapper.updateById(toUser);
} catch (Exception e) {
// 出现异常回滚事务
status.setRollbackOnly();
}
}
});
}
}
```
在上面的代码中,我们使用了 TransactionTemplate 的 execute() 方法来执行事务代码。
在 doInTransactionWithoutResult() 方法中,我们编写了转账操作的代码。如果出现异常,我们调用 status.setRollbackOnly() 来回滚事务。
需要注意的是,TransactionTemplate 会自动为我们管理事务的开启、提交或回滚。我们不需要手动去管理事务的状态。
阅读全文