• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

解决@Transactional注解的方法切换数据源失效问题

武飞扬头像
Vamkit
帮助1

只是其中一个场景

场景:加了注解@Transactional的方法中切换数据源查询数据时导致事务失效。如在A方法中加事务默认数据源是ds1,现在要调用另外一个数据源ds2的方法B。

有效解决方法:(只限于切换数据源查询)

可在B方法上增加注解@Transactional(propagation = Propagation.NOT_SUPPORTED)

这样在切换数据源时会以非事务方式执行,原主逻辑事务依旧生效。

  1.  
    @Override
  2.  
    @Transactional
  3.  
    public BaseResult balance(Map<String, Object> paraMap) throws ParseException {
  4.  
    List<Map<String, Object>> unitList = piTgfxAdbService.getUnitList();
  5.  
    }
  1.  
    @Override
  2.  
    @Transactional(propagation = Propagation.NOT_SUPPORTED)
  3.  
    public List<Map<String, Object>> getUnitList() {
  4.  
    return piTgfxAdbMapper.getUnitList();
  5.  
    }

有几种是不走事务执行的,所以也需要额外注意下

事务

特点

REQUIRED

默认,如果存在事务,则支持当前事务;不存在,则开启一个新事务

SUPPORTS

如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行

MANDATORY

需要在一个正常的事务内执行,否则抛异常

REQUIRES_NEW

不管存不存在事务,都开启一个新事务

NOT_SUPPORTED

不管存不存在,都以非事务方式执行,当存在事务时,挂起事务

NEVER

非事务方式执行,如果存在事务,则抛异常

NESTED

如果不存在事务,则开启一个事务运行;如果存在事务,则运行一个嵌套事务

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfkjkib
系列文章
更多 icon
同类精品
更多 icon
继续加载