(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 20221097683 5.5
(22)申请日 2022.08.15
(71)申请人 全通金信控股 (广东) 有限公司
地址 528405 广东省中山市东区中山四路
88号尚峰金融商务中心五座 19层之八
(住所申报)
(72)发明人 李宝君 何玉华
(51)Int.Cl.
G06F 9/48(2006.01)
G06F 9/50(2006.01)
G06F 16/245(2019.01)
G06F 16/27(2019.01)
(54)发明名称
一种一主 多从的数据源调度、 管理装置
(57)摘要
本发明涉及互联网访问数据调度的技术领
域, 具体公开了一种一主多从的数据源调度、 管
理装置, 包括代理数据源、 DAO层切面拦截器和数
据源上下文, 包括以下步骤: S1、 获取数据源标
识; S2、 DAO层切面拦截器获取DAO层接口上的标
签的“数据源标识 ”, 将“数据源标识 ”记录到数据
源上下文; S3、 代理数据源由数据源上下文中获
取“数据源标识 ”; S4、 数据源上下文返回给代理
数据源“数据源标识”; S5、 代理数据源 根据“数据
源标识”选择数据源并调用数据库; S6、 数据库 将
调用数据源反馈到代理数据源、 DAO层以及DAO层
切面拦截器; S7、 查看 是否有挂起的sp ring事务;
该数据源调度、 管理装置不会因为等待可用连接
而耗尽系统的可用线程, 从而造成整个应用堵
死。
权利要求书2页 说明书6页 附图3页
CN 115309528 A
2022.11.08
CN 115309528 A
1.一种一主多从的数据源调度、 管理装置, 包括代理数据源、 DAO层切面拦截器和数据
源上下文, 其特 征在于, 包括以下步骤:
S1、 获取数据源标识, 查看是否有spri ng事务, 有则挂 起该事务;
S2、 DAO层切面拦截器获取DAO层接 口上的标签 的“数据源标识 ”, 将“数据源标识 ”记录
到数据源上 下文, 并调用DAO层和调用代理数据源;
S3、 代理数据源由数据源上下文中获取 “数据源标识 ”, 所述代理数据源包括数据源调
度器、 主数据源和从数据源key ‑value容器, 所述数据源调度器用于从数据源 上下文中取出
“数据源标识 ”, 所述主数据源为直接使用的数据源, 所述 从数据源key ‑value容器内储存有
代理从数据源;
S4、 数据源上 下文返回给代理数据源 “数据源标识 ”;
S5、 代理数据源根据 “数据源标识 ”选择数据源并调用数据库;
S6、 数据库将调用数据源反馈 到代理数据源、 DAO层以及DAO层切面 拦截器;
S7、 查看是否有挂起的spring事务, 有则 恢复该事务, 将数据源标识由数据源上下文中
移除, 然后返回结果给service层。
2.根据权利要求1所述的一种一主多从的数据源调度、 管理装置, 其特征在于, 所述DAO
层切面拦截器的处理方法包括: 所述DAO层切面拦截器从DAO层接口中, 尝试获取 “数据源标
识”, 若获取不到, 则直接调用DAO层接口; 若获取得到, DAO层切面拦截器会调起数据源 前置
处理器, 该处理器会先将 “数据源标识 ”记录到数据源上下文中, 然后查看是否有spring事
务, 有则挂起该事务, 然后调用DAO层, DAO层返回调用结果后, 查看是否有挂起的spring事
务, 有则恢复该事务。
3.根据权利要求2所述的一种一主多从的数据源调度、 管理装置, 其特征在于, 所述DAO
层切面拦截器的配置如下:
<aop:config>
<aop:aspect ref="microServiceDao Interceptor ">
<aop:pointcut expression="execution(* cn.qtone.zf.*.*.dao..*
Mapper.*(..))" id="daoInterceptor "/>
<aop:around method="around" pointcut‑ref="dao Interceptor "/>
</aop:aspect>
</aop:config>
其中,“* cn.qtone.zf.*.*.dao. .*Mapper.*(..) ”为需要拦截的接口。
4.根据权利要求3所述的一种一主多从的数据源调度、 管理装置, 其特征在于, 所述DAO
层切面拦截器的处 理方法还 包括以下步骤:
当在service层开启spring所管理的事务时, spring事务管理器提前由数据源中获取
链接, 当在service层的某一带事务方法中, 顺序调用接口 functoinA、 functoinB、
functoinC时, 则在代理数据源表现为获取主数据源链接master, 然后执行functoinA的
sql, 然后保存链接master, 获取代理从数据源链接slave, 用链接slave执行functoinB的
sql, 然后释放链接slave, 用链接master执 行functo inC的sql, 释放链接master。
5.根据权利要求1所述的一种一主多从的数据源调度、 管理装置, 其特征在于, 所述代
理数据源 包括以下切换配置方法:权 利 要 求 书 1/2 页
2
CN 115309528 A
2A、 根据name、 type、 isProtected、 co nfig切换代理从数据源配置;
B、 根据name查看从数据源key ‑value容器中是否有对应的代理从数据源, 若否, 则将任
务抛异常并结束, 若是, 则进入下一 步;
C、 新建一个代理从数据源然后将type、 isProtected、 config传并启动; 若不能启动, 则
将任务抛异常并结束, 若正常启动, 则进入下一 步;
D、 将name对应的原数据源取 出并保存, 将新数据源放入;
E、 查看原数据链接是否有活跃连接, 若无, 则关闭原数据源并结束, 若有, 则循环查看
原数据链接是否有活跃 连接, 直至没有活跃 连接后关闭原数据源并结束。
6.根据权利要求1所述的一种一主多从的数据源调度、 管理装置, 其特征在于, 所述数
据源上下文内设置有一jdk提供的ThreadLocal对象, 该ThreadLocal对象可以将变量保存
在当前执行的线程当中。
7.根据权利要求6所述的一种一主多从的数据源调度、 管理装置, 其特征在于, 所述数
据源上下文包括以下提供 方法:
a、 将数据源标识 记录到ThreadL ocal对象中:
public static void setSlaveDataSource(St ring slaveDataSource) {..};
b、 将从ThreadL ocal对象获取 数据源标识:
public static String getSlaveDataSource() {..};
c、 将数据源标识从ThreadL ocal对象移除:
public static String removeSlaveDataSource() {..}。权 利 要 求 书 2/2 页
3
CN 115309528 A
3
专利 一种一主多从的数据源调度、管理装置
文档预览
中文文档
12 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共12页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 13:07:16上传分享