springboot+mongodb @Transactional事务注解失效问题处理

问题场景

在一个@service方法上加上 @Transactional(rollbackFor = Exception.class)注解后,发现该方法中调用的另一个方法中抛出异常,在调用该方法之前的对表的修改未回滚,生效了。

问题代码:

/**
     * @Description: 修改任务状态
     * @Author: gj
     * @Date: 2020/4/2
     */
    @Transactional(rollbackFor = Exception.class)
    public void updateTaskState(Integer userId, String id, Integer type, Integer currentUserId) {
        designService.updateTaskState(userId, id, type, currentUserId);
        if (type == 5) {
            Optional.ofNullable(designService.getDesignTaskDetail(id)).ifPresent(designTaskDO -> {
                WorksDTO worksDTO = new WorksDTO();
                worksDTO.setBrandId(designTaskDO.getCustomerId());
                worksDTO.setClothingCategoryId(designTaskDO.getClothingCategoryId());
                worksDTO.setDesigner(designTaskDO.getDesigner());
                worksDTO.setDesignTaskId(designTaskDO.getDesignTaskCode());
                worksDTO.setSortId(designTaskDO.getApplicationType().toString());
                worksDTO.setCompany(designTaskDO.getCompany());
                worksDTO.setCreator(designTaskDO.getCreator());
                List<UserFile> userFiles = new ArrayList<>();
                List<DesignFileDO> designFileDOList = designService.listFile(id);
                if (!designFileDOList.isEmpty()) {
                    designFileDOList.forEach(file -> {
                        userFiles.add(new UserFile(file.getName(), 0, file.getOssKeyOriginal(), file.getOssKeyPreview()));
                    });
                    worksDTO.setFiles(userFiles);
                    worksAppService.addBatch(worksDTO);
                }
            });
        }
    }

worksAppService.addBatch(worksDTO)中抛异常,但上面的designService.updateTaskState(userId, id, type, currentUserId)修改状态成功了。

解决方法

查阅相关资料发现需要添加配置类,开启mongodb事务。

@Configuration
public class TransactionConfig {
    @Bean
    MongoTransactionManager transactionManager(MongoDbFactory factory){
        return new MongoTransactionManager(factory);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值