• @DS("aaa") 使用切库失败


    看下是否是在事务中调用的, 在事务中会导致切库失败

    问题描述
    在配置多数据源项目中, service中根据@DS(“**”)配置实现数据库切换. 在加@Transactional事务的方法中, 调用另外一个数据源不同service的方法, 此方法会因为切换数据库失败导致执行sql错误. 示例如下


    问题分析
    开启事务的同时,会从数据库连接池获取数据库连接, 在这个事务内的所有数据库操作都基于这个连接. 为使@DS生效, 必须重新获取数据库连接, 可以采取更改事务传播机制的方法实现.
    问题解决
    将代码修改如下, 两个方法设置事务传播机制为「propagation = Propagation.REQUIRES_NEW」


    拓展-传播机制
    5.1. 传播机制生效条件
    spring是使用aop来代理事务控制, 是针对于接口或类的, 所以在同一个 service 类中两个方法的调用, 传播机制是不生效的.
    5.2. 传播机制常用类型
    REQUIRED
    支持当前事务, 如果当前没有事务,则新建事务
    如果当前存在事务, 则加入当前事务, 合并成一个事务
    REQUIRES_NEW
    新建事务, 如果当前存在事务, 则把当前事务挂起
    这个方法会独立提交事务, 不受调用者的事务影响, 父级异常, 它也是正常提交
    ————————————————

    原文链接:https://blog.csdn.net/qq_42445719/article/details/123111852

  • 相关阅读:
    vue路由的两种模式,hash与history
    javascript的继承小结
    attr和prop区别
    ie6、7下 text-indent 问题
    推荐链接
    iphone中 input圆角bug
    gif图片加载问题
    IE7中绝对定位元素之间的遮盖问题
    多行文本溢出显示省略号(...)的方法
    ie6兼容之绝对定位元素内容为空时高度问题
  • 原文地址:https://www.cnblogs.com/redBack/p/16399628.html
Copyright © 2020-2023  润新知