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

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

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

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

需要适配的几种场景
1.一个查询方法存在一个默认数据源,正常情况下是查询默认数据源
2.一个查询方法可以根据查询参数切换数据源
3.一个查询方法可以指定具体的数据源

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

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

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

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

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


增删改查数据源方法



实现AbstractRoutingDataSource类

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

通过Aop实现数据源切换

定义一个数据源注解

切面类

mybatis测试方法类

测试用例

先找出两个存在的数据库,risk_biz和lt_biz,分表查询下表和数据。risk_biz是数据源key,数据库是arc_lz,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的博客

你可能感兴趣的:(运行时可增减的动态数据源)