ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用事务注解导致DS数据源切换失效解决方法

2022-01-11 19:30:13  阅读:277  来源: 互联网

标签:Exception superChannelNotice updateById int 数据源 rollbackFor class 注解 DS


先来看一下我的数据源配置,通过不同端口模拟多数据源配置:

 

 目前业务需求是对superdata库里的数据做修改的同时game分库也同步进行修改,虽然只有一次关联还是使用了事务保证原子性,加上注解 @Transactional(rollbackFor = Exception.class)参数加上"rollbackFor = Exception.class"异常时回滚

    @Override
    @Transactional(rollbackFor = Exception.class)
    public int updateInfoById(SuperChannelNotice superChannelNotice) {
        int updateById = getBaseMapper().updateById(superChannelNotice);
        operationChannelNoticeService.updateActivity(superChannelNotice.getGameId(), superChannelNotice);
        return updateById;
    }

加上事务注解后会切换数据源失效导致找不到对应的表:

解决办法:

内层代码加事务注解并加入参数(propagation = Propagation.REQUIRES_NEW)

该参数的作用是使内层方法被调用时,外层方法的事务被挂起。内层事务相对于外层事务是完全独立的,具有独立隔离性互不干扰。

    @Override
    @Transactional(rollbackFor = Exception.class)
    public int updateInfoById(SuperChannelNotice superChannelNotice) {
        int updateById = getBaseMapper().updateById(superChannelNotice);
        operationChannelNoticeService.updateActivity(superChannelNotice.getGameId(), superChannelNotice);
        return updateById;
    }
    @Override
    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
    public int updateActivity(Integer gameId, SuperChannelNotice superChannelNotice) {
        OperationChannelNotice operationChannelNotice = new OperationChannelNotice();
        BeanUtils.copyProperties(superChannelNotice,operationChannelNotice);
        return getBaseMapper().updateById(operationChannelNotice);
    }

加入该参数后问题得到解决:

 

标签:Exception,superChannelNotice,updateById,int,数据源,rollbackFor,class,注解,DS
来源: https://blog.csdn.net/weixin_49128211/article/details/122437578

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有