基于注解的 Spring 多数据源配置和使用 前一段时间研究了一下 spring 多数据源的配置
和使用,为了后期从多个数据源拉取数据定时进行数据分析和报表统计做准备。由于之前
做过的项目都是单数据源的,没有遇到这种场景,所以也一直没有去了解过如何配置多数
据源。
后来发现其实基于 spring 来配置和使用多数据源还是比较简单的,因为 spring 框架已经
预留了这样的接口可以方便数据源的切换。
先看一下 spring 获取数据源的源码:
可 以 看 到 AbstractRoutingDataSource 获 取 数 据 源 之 前 会 先 调 用
determineCurrentLookupKey 方法查找当前的 lookupKey,这个 lookupKey 就是数
据源标识。
因此通过重写这个查找数据源标识的方法就可以让 spring 切换到指定的数据源了。
第一步:创建一个 DynamicDataSource 的类,继承 AbstractRoutingDataSource 并
重写 determineCurrentLookupKey 方法,代码如下:
!"#$%&
'((从自定义的位置获取数据源标识
)*+%&,
-.
/
0.
第二步:创建 DynamicDataSourceHolder 用于持有当前线程中使用的数据源标识,代
码如下:
*
(11
1注意:数据源标识保存在线程变量中,避免多线程操作数据源时互相干扰
1(
'234"563*78389!7:;
34"56%&,
)
-%&
/3*78389!7+%&,
0.
<
%&
3*78389!7+%&,
评论3