全网唯一标准王
(19)国家知识产权局 (12)发明 专利 (10)授权公告 号 (45)授权公告日 (21)申请 号 202210777839.0 (22)申请日 2022.07.04 (65)同一申请的已公布的文献号 申请公布号 CN 114840598 A (43)申请公布日 2022.08.02 (73)专利权人 好享家舒适智能家居股份有限公 司 地址 210016 江苏省南京市玄武区中山 东 路311-2号 (72)发明人 汪浩 李郃 郑华忠  (74)专利代理 机构 南京知识律师事务所 32 207 专利代理师 徐航天 (51)Int.Cl. G06F 16/25(2019.01) G06F 16/955(2019.01)G06F 8/20(2018.01) G06F 8/73(2018.01) 审查员 赵阳 (54)发明名称 一种创建运行时数据源并自动切换的方法 及系统 (57)摘要 本发明公开了一种创建运行时数据源并自 动切换的方法及系统, 其中创建运行时数据源并 自动切换系统包括以下模块: 运行时数据源注 解、 运行时数据源接口、 动态数据源管理模块、 运 行时数据源切面模块、 运行时数据源线程持有模 块、 运行时数据源缓存模块。 本发明的创建运行 时数据源并自动切换方法, 开发者可以自由定义 数据源信息存储来源, 实现开发者无需关心运行 时数据源该如何创建和 切换。 权利要求书3页 说明书8页 附图4页 CN 114840598 B 2022.10.04 CN 114840598 B 1.一种创建运行时数据源并自动切换的系统, 其特 征在于, 包括以下模块: 运行时数据源注解, 标记运行时数据源注解的方法在执行期间使用动态创建的运行时 数据源; 运行时数据源接口, 当一个模块上实现了运行时数据源接口, 则具有运行时动态生成、 切换和使用动态创建的运行时数据源的能力; 运行时数据源接口定义了以下方法: 设置运行时动态数据源ID、 获取运行时数据源 JDBC URL地址、 获取运行时数据源驱动名称、 获取运行时数据源用户名、 获取运行时数据源 密码; 动态数据源管理模块, 包括数据源ID和数据源对象的键值对 映射属性、 默认的数据源 对象属性; 还 包括以下 方法: 获取当前线程应使用或正在使用的数据源ID; 运行时数据源切面模块: 根据声明的目标方法, 寻找目标方法对应的连接点; 目标方法 指的是所在模块托管给spring容器管理、 实现了运行时数据源接口、 且标记了运行时数据 源注解的方法; 连接点是对当前运行 的目标方法的抽象; 将前置通知织入到目标方法执行 前, 前置通知 包括目标方法代理执行运行时数据源创建、 注册逻辑; 将后置通知织入到目标 方法执行后, 后置通知包括 运行时数据源的清理逻辑; 目标方法代理执 行运行时数据源创建、 注 册逻辑包括: 首先获取连接点信息; 从连接点信息中解析 得到目标对象; 判断目标对象是否实现了运行时数据源接口, 以及目标方法是否标记了运行时数据源 注解, 如果同时满足条件, 则认为目标对象需要动态的创建运行时数据源, 继续执行后续通 知逻辑; 将创建好的数据源对象, 注册到动态数据源管理模块的数据源ID和数据源对象的键值 对映射属性中; 调用运行时数据源线程持有模块, 将数据源ID设置到当前线程中; 当执行数据库操作 前, 动态数据源管理模块获取当前线程应使用的数据源ID, 再从数据源ID和数据源对象的 键值对映射属性中, 根据数据源ID获取 数据源对象, 即实现数据源自动切换; 运行时数据源线程持有模块, 持有当前线程 正在操作的数据源ID; 运行时数据源缓存 模块, 能够缓存创建的运行时数据源 对象。 2.根据权利要求1所述的创建运行时数据源并自动切换的系统, 其特 征在于: 目标方法代理执 行运行时数据源创建、 注 册逻辑还 包括: 连接点包括目标 方法的索引、 所属对象、 参数信息; 判断目标对象是否实现了运行时数据源接口, 以及目标方法是否标记了运行时数据源 注解, 如果未同时满足条件, 则认为该目标对象不需要创建运行时数据源, 直接退出前置通 知的执行; 在执行创建前, 程序会根据目标对象设置的数据库连接信息, 先去运行时数据源缓存 模块中查找数据源是否已存在, 如果存在, 则直接获取; 如果不存在, 则创建一个数据源对 象; 运行时数据源的清理逻辑包括: 首先获取连接点信息;权 利 要 求 书 1/3 页 2 CN 114840598 B 2从连接点信息中解析 得到目标对象; 判断目标对象是否实现了运行时数据源接口, 如果未实现, 则认为目标对象不需要清 理运行时数据源信息, 直接退 出后置通知的执 行; 如果实现, 则继续执 行后续通知逻辑; 从运行时数据源线程持有模块中获取当前线程使用的数据源ID, 判断是否是系统默认 数据源, 如果是系统默认数据源, 则不需要执 行清理逻辑; 如果不是默认数据源, 则清理运行时数据源线程持有模块中存储的数据源ID; 并判断 是否需要清理运行时数据源信息; 如果需要, 则将运行时数据源对 象从动态数据源管理模 块和运行时数据源缓存 模块中移除。 3.根据权利要求1或2所述的创建运行时数据源并自动切换的系统, 其特征在于, 还包 括: 数据源监测模块, 根据数据源的使用频率, 判断是否需要清理创建的运行时数据源信 息; 如果需要, 则将运行时数据源对 象从动态数据源管理模块和 运行时数据源缓存模块中 移除。 4.根据权利要求1所述的创建运行时数据源并自动切换的系统, 其特 征在于: 数据源ID和数据源对象的键值对映射属性是一个Map 数据类型, key为数据源ID, value 为数据源 对象。 5.一种创建运行时数据源并自动切换的方法, 其特 征在于, 包括以下步骤: S11, 运行时数据源切面模块根据声明的目标方法, 寻找目标方法对应的连接点; 目标 方法指的是所在模块托管给spring容器管理、 实现了运行时数据源接口、 且标记了运行时 数据源注解的方法; 连接点是对当前运行的目标 方法的抽象; S12, 运行时数据源切面模块根据寻找到的目标方法, 将前置通知织入到目标方法执行 前, 前置通知 包括目标方法代理执行运行时数据源创建、 注册逻辑; 将后置通知织入到目标 方法执行后, 后置通知包括 运行时数据源的清理逻辑; 前置通知首 先获取连接点信息; 从连接点信息中解析 得到目标对象; 判断目标对象是否实现了运行时数据源接口, 以及目标方法是否标记了运行时数据源 注解, 如果同时满足条件, 则认为目标对象需要动态的创建运行时数据源, 继续执行后续通 知逻辑; 将创建好的数据源对象, 注册到动态数据源管理模块的数据源ID和数据源对象的键值 对映射属性中; 调用运行时数据源线程持有模块, 将数据源ID设置到当前线程中; 当执行数据库操作 前, 动态数据源管理模块获取当前线程应使用的数据源ID, 再从数据源ID和数据源对象的 键值对映射属性中, 根据数据源ID获取 数据源对象, 即实现数据源自动切换; S13, 当任意 一个目标 方法执行时, 先执行前置通知的逻辑; S14, 目标 方法开始执 行具体的业 务逻辑; S15, 目标 方法执行完成; S16, 执行后置通知的逻辑。 6.根据权利要求5所述的创建运行时数据源并自动切换的方法, 其特征在于, S11的执 行逻辑包括:权 利 要 求 书 2/3 页 3 CN 114840598 B 3

PDF文档 专利 一种创建运行时数据源并自动切换的方法及系统

文档预览
中文文档 16 页 50 下载 1000 浏览 0 评论 0 收藏 3.0分
温馨提示:本文档共16页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种创建运行时数据源并自动切换的方法及系统 第 1 页 专利 一种创建运行时数据源并自动切换的方法及系统 第 2 页 专利 一种创建运行时数据源并自动切换的方法及系统 第 3 页
下载文档到电脑,方便使用
本文档由 SC 于 2024-02-24 01:02:13上传分享
友情链接
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。