超赞的文章
参考文章1:https://blog.youkuaiyun.com/qq_34337272/article/details/80394121
参考文章2:https://www.cnblogs.com/jinjian91/p/10549125.html
参考文章3:https://blog.youkuaiyun.com/justry_deng/article/details/80828180
通用配置
添加下面依赖,sprongboot 会默认开启事务管理
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
或在启动类添加
@EnableTransactionManagement
开启事务

一、声明式事务
使用事务:
@Transaction
public void test(String userName){
//...
}
捕获到异常将自动进行回滚,其只能捕获到运行时异常
spring事务失效的几种场景https://blog.youkuaiyun.com/Jiangbohao_/article/details/107182301
@Transactional 注解参数详解https://blog.youkuaiyun.com/weixin_44259720/article/details/110138972
二、编程式事务
使用事务:
在需要的服务类里添加:
//事务使用的接口
@Resource
DataSourceTransactionManager dataSourceTransactionManager;
@Resource
TransactionDefinition transactionDefinition;
//手动开启事务!
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
//事务回滚
//最好是放在catch 里面,防止程序异常而事务一直卡在哪里未提交
dataSourceTransactionManager.rollback(transactionStatus);
//提交事务
dataSourceTransactionManager.commit(transactionStatus);
伪代码仅供参考:
@Service
public class OrderMainService {
//事务使用的接口
@Resource
DataSourceTransactionManager dataSourceTransactionManager;
@Resource
TransactionDefinition transactionDefinition;
@Resource
OrderGoodsMapper orderGoodsMapper;
@Resource
UserCartMapper userCartMapper;
@Resource
GoodsInfoMapper goodsInfoMapper;
@Resource
private OrderMainMapper orderMainMapper;
public CommonResult<Integer> addOrder(OrderData orderData) {
//手动开启事务!
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
//遍历,判断商品库存是否充足
for (OrderGoods orderGoods : orderData.getOrderGoodsList()) {
//订购数量
int goodsCount;
//查询商品信息
GoodsInfo goodsInfo;
//判断物品库存是否充足
if (goodsInfo.getGoodsRemainCount() - goodsCount >= 0) {
//更新商品库存信息
goodsInfo.setGoodsRemainCount(goodsInfo.getGoodsRemainCount() - goodsCount);
goodsInfoMapper.editGoods(goodsInfo);
} else {
//事务回滚
dataSourceTransactionManager.rollback(transactionStatus);
//订单中只要有一项商品库存不足就取消订单
return new CommonResult<>("商品库存不足", null);
}
}
//订单中所有商品库存都足够则更新数据库中商品信息
//提交事务
dataSourceTransactionManager.commit(transactionStatus);
//...
Integer influence = new Integer(1);
return new CommonResult<>("success",influence);
}
}

1681

被折叠的 条评论
为什么被折叠?



