Spring多线程情况下保证事务

 Spring可以支持编程式事务和声明式事务。
Spring提供的最原始的事务管理方式是基于TransactionDefinition、PlatformTransactionManager、TransactionStatus 编程式事务。
而TransactionTemplate的编程式事务管理是使用模板方法设计模式对原始事务管理方式的封装。


之所以分享这个是因为搜Spring多线程情况下保证事务出来一堆使用PlatformTransactionManager来实现多线程事务,一点都不优雅,所以结合他们分享的文章再出来一版,便于搜索。

下面直接就贴案例,至于原理在座的大佬自己研究,咱这就不板门弄斧了。

@SpringBootTest
class SeckillGoodsServiceImplTest {
    @Autowired
    private SeckillGoodsMapper seckillGoodsMapper;
    @Autowired
    private TransactionTemplate template;

    @Test
    public void test() throws InterruptedException {
        CompletableFuture.runAsync(() -> {
            template.execute((status) -> {
                SeckillGoods seckillGoods = new SeckillGoods();
                seckillGoods.setId(4L);
                seckillGoods.setSkuName("66666666666");
                
                seckillGoodsMapper.updateById(seckillGoods);
                
                //制造一个异常,然后修改没有成功,证明事务已经回滚了,spring yyds
                int i=10/0;
                return status;
            });
        });
    }

}

图片版:

 查看数据库没有修改成功:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值