【已解决】KOCA多数据源,切换失效,数据源错乱

KOCA版本 :4.0
KOCA模块 :多数据源
模块版本 :4.0
场景 :在微服务场景下,我们通过多数据源设置,DataSourceUtils.set()方法设置数据源,通过reset()方法重置数据源
问题 :reset方法重置失败,在访问业务接口的时候发现,并没有切换为默认的业务数据源,而是访问到了Koca_admin的数据库,导致找不到业务表
报错细节 :
尝试解决方案:

多数据源配置发一下看看

koca:
  jdbc:
    defaultDataSourceId: rms  # 默认数据源
    dataSources:
      - id: rms               # 数据源id
        pool:
          # 数据源连接池配置 数据源对应的更多属性可直接在此追加
          url: jdbc:mysql://10.210.4.158:3306/rms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowMultiQueries=true # 数据源url
          username: root         # 数据源用户名
          password: 123456        # 加密后的数据源密码
          initialSize: 5         # Drud数据源属性  连接池的初始连接数
          minIdle: 5            # Druid数据源属性 连接池的最小数据库连接数
          maxActive: 20          # Druid数据源属性 连接池的最大数据库连接数
          maxWait: 60000         # Druid数据源属性 配置获取连接等待超时的时间
      - id: koca               # 数据源id
        pool:
          # 数据源连接池配置 数据源对应的更多属性可直接在此追加
          url: jdbc:mysql://10.210.4.158:3306/koca_admin?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowMultiQueries=true # 数据源url
          username: root         # 数据源用户名
          password: 123456        # 加密后的数据源密码
          initialSize: 5         # Drud数据源属性  连接池的初始连接数
          minIdle: 5            # Druid数据源属性 连接池的最小数据库连接数
          maxActive: 20          # Druid数据源属性 连接池的最大数据库连接数
          maxWait: 60000         # Druid数据源属性 配置获取连接等待超时的时间

在这种情况下,我们发现数据源并没有reset到默认的rms,后面请求业务接口的时候,会发现还是用Koca_admin的数据源

你的这个情况是事务导致的,事务开始的时候会持有一个数据源的连接,不应该把切换数据源的代码放在同一个事务里,可以参考下这个代码

请在finally代码块中重置数据源,因为 这里业务定义的Dao层可能执行异常,导致DataSourceUtils.reset()并没有执行到,就会出现下次访问数据源是"koca"数据源,而非默认"rms"数据源;

try{
DataSourceUtils.set("koca");
//do your business
} finally {
DataSourceUtils.reset();
}