spring 模板事务,耗时操作,锁行时间短一些

上代码

    /**
     * 模版事务
     */
    @Resource
    private TransactionTemplate transactionTemplate;

 /**
     * 商户服务项目编辑
     */
    @Override
    public boolean merchantServeUpdate(MerchantServeOperateReq req) {
        //复制商户服务的属性
        BaseMerchantServe serve = BeanUtil.copyBean(req, BaseMerchantServe.class);
        //将富文本的字符串转为stream 存储到oss中,将返回的链接存储在数据库
        String richTextFull = req.getServeDetailIamge();
        //请求阿里云,耗时操作
        String ossUrl = richTextToOSSUrl(richTextFull);
        //服务详情图
        serve.setServeDetailIamge(ossUrl);
        //服务主图
        serve.setServeMasterImage(JSON.toJSONString(req.getServeMasterImage()));
        Integer id = req.getId();

		//只针对如下做事务操作,也就是锁的时间只有下面一些。
		//上面请求阿里云的时间 不占用这一行的行锁时间.
		//目的 防止操作这一行数据占用时间过长,其他线程无法操作。
        transactionTemplate.execute(action -> {
            // 更新服务表
            baseMerchantServeMapper.updateById(serve);
            //将之前的服务ID删除
            baseMerchantProjectService.deleteByServerId(id);
            //新增服务项目
            List<MerchantServeProjectResp> projectFromFront = req.getMerchantServeProjectResps();
            if (CollectionUtils.isEmpty(projectFromFront)) {
                return Boolean.TRUE;
            }
            List<BaseMerchantProject> saveServerList = projectFromFront.stream()
                    .map(item -> {
                        BaseMerchantProject project = BeanUtil.copyBean(item, BaseMerchantProject.class);
                        project.setMerchantServeId(id);
                        project.setInsertBaseInfo();
                        return project;
                    }).collect(Collectors.toList());
            baseMerchantProjectService.saveBatch(saveServerList);
            return Boolean.TRUE;
        });
        return Boolean.TRUE;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值