运行时可增减的动态数据源

目前公司项目有个服务提供动态的指标计算,可查不同库配置不同sql或者代码,实时计算指标,本来数据源是需要重启配置的,想了下可以做成不重启就新增或者删除


设计:在mongodb中保存数据源信息,项目启动时加载到内存初始化数据源,运行时可动态的新增或者删除数据源不需要重启服务,暂时没有需求,后续需要的时候可以基于这个改造一下

动态数据源切换是基于springboot提供的AbstractRoutingDataSource类来实现的,在每次查询数据库的时候,设置需要的数据源,就可以实现动态数据源切换,这里每次查询的时候可以通过aop来确认数据源。

需要适配的几种场景

1.一个查询方法存在一个默认数据源,正常情况下是查询默认数据源

2.一个查询方法可以根据查询参数切换数据源

3.一个查询方法可以指定具体的数据源

定义在mongodb里面保存的数据源配置

mongodb里面需要先插入一条数据

建一个动态数据源工厂,初始化的时候就要从mongodb里面查询存在的数据源并初始化

初始化数据源方法,用的druid

初始化数据源这里把不需要配置的默认了

增删改查数据源方法

实现AbstractRoutingDataSource类

通过ThreadLocal来保存当前线程的数据源,在每次查询前setDataSource,查询结束clearDataSource,默认情况下ThreadLocal为空,取默认数据源

通过Aop实现数据源切换

定义一个数据源注解

切面类

mybatis测试方法类

测试用例

先找出两个存在的数据库,riskbiz和ltbiz,分表查询下表和数据。riskbiz是数据源key,数据库是arclz,lt_biz数据源key和数据库名字一样

select real_name from arc_lz.arc_user where id = 17910;
select real_name from lt_biz.lt_user_account where id = 11;

测试类

测试结果

代码可以在Github上找到,测试用例代码

本文来自chentiefeng的博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值