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();
}