【技术实现步骤摘要】
一种创建运行时数据源并自动切换的方法及系统
[0001]本专利技术属于数据处理
,尤其涉及一种创建运行时数据源并自动切换的方法及系统。
技术介绍
[0002]当今互联网应用时代,后端服务一般对数据源的管理采取“一对一”的连接方式,即一个应用服务连接一个数据库,每个应用对应着单个数据源。然而随着业务的发展、数据量的暴增、对接系统的增多,“一对一”的方式很多时候已经难以满足应用需求。很多时候,应用服务需要支持同时连接多个数据库,即对应多个数据源,实现可以方便的查询各个数据库的数据,而不必通过TCP、HTTP或webservice接口的方式跨服务调用来获取数据。
[0003]现如今,大多数系统对多数据源接入的方式采用声明式配置、用时即取、不用闲置的方式。声明式配置,指的是后端服务在运行前需配置好各个数据库的连接参数(例如数据库url地址、用户名、密码等)。用时即取,指的是服务运行后,会提前创建好各个数据源的数据库连接池缓存,连接池缓存里存放了若干个数据库连接对象。当客户端需要与数据库交互时,无需临时创建连接对象,只需从连接池缓存中获取、使用。不用闲置,指的是即使没有客户端使用这些数据源对象、数据库连接池对象缓存,这些对象在整个应用服务的运行生命周期也是长期存在的。只要服务不关闭,这些对象便不会消失。
[0004]多数据源采用声明式配置的方式,对于后续的代码开发固然带来了许多便利, 然而仍然存在如下缺点:应用服务需要提前配置好各个数据库的连接参数,这便要求开发者需要在开发阶段便知晓各个数据库的连接配置。 ...
【技术保护点】
【技术特征摘要】
1.一种创建运行时数据源并自动切换的系统,其特征在于,包括以下模块:运行时数据源注解,标记运行时数据源注解的方法在执行期间使用动态创建的运行时数据源;运行时数据源接口,当一个模块上实现了运行时数据源接口,则具有运行时动态生成、切换和使用动态创建的运行时数据源的能力;运行时数据源接口定义了以下方法:设置运行时动态数据源ID、获取运行时数据源JDBC URL地址、获取运行时数据源驱动名称、获取运行时数据源用户名、获取运行时数据源密码;动态数据源管理模块,包括数据源ID和数据源对象的键值对映射属性、默认的数据源对象属性;还包括以下方法:获取当前线程应使用或正在使用的数据源ID;运行时数据源切面模块:根据声明的目标方法,寻找目标方法对应的连接点;目标方法指的是所在模块托管给spring容器管理、实现了运行时数据源接口、且标记了运行时数据源注解的方法;连接点是对当前运行的目标方法的抽象;将前置通知织入到目标方法执行前,前置通知包括目标方法代理执行运行时数据源创建、注册逻辑;将后置通知织入到目标方法执行后,后置通知包括运行时数据源的清理逻辑;运行时数据源线程持有模块,持有当前线程正在操作的数据源ID;运行时数据源缓存模块,能够缓存创建的运行时数据源对象。2.根据权利要求1所述的创建运行时数据源并自动切换的系统,其特征在于:目标方法代理执行运行时数据源创建、注册逻辑包括:首先获取连接点信息,连接点包括目标方法的索引、所属对象、参数信息;从连接点信息中解析得到目标对象;判断目标对象是否实现了运行时数据源接口,以及目标方法是否标记了运行时数据源注解,如果同时满足条件,则认为该目标对象需要动态的创建运行时数据源,继续执行后续通知逻辑;否则认为该目标对象不需要创建运行时数据源,直接退出前置通知的执行;在执行创建前,程序会根据目标对象设置的数据库连接信息,先去运行时数据源缓存模块中查找数据源是否已存在,如果存在,则直接获取;如果不存在,则创建一个数据源对象;将创建好的数据源对象,注册到动态数据源管理模块的数据源ID和数据源对象的键值对映射属性中;调用运行时数据源线程持有模块,将创建的运行时数据源ID设置到当前线程中;当执行数据库操作前,动态数据源管理模块获取当前线程应使用的数据源ID,再从数据源ID和数据源对象的键值对映射属性中,根据数据源ID获取数据源对象,即实现数据源自动切换;运行时数据源的清理逻辑包括:首先获取连接点信息;从连接点信息中解析得到目标对象;判断目标对象是否实现了运行时数据源接口,如果未实现,则认为目标对象不需要清理运行时数据源信息,直接退出后置通知的执行;如果实现,则继续执行后续通知逻辑;从运行时数据源线程持有模块中获取当前线程使用的数据源ID,判断是否是系统默认数据源,如果是系统默认数据源,则不需要执行清理逻辑;
如果不是默认数据源,则清理运行时数据源线程持有模块中存储的数据源ID;并判断是否需要清理运行时数据源信息;如果需要,则将运行时数据源对象从动态数据源管理模块和运行时数据源缓存模块中移除。3.根据权利要求1或2所述的创建运行时数据源并自动切换的系统,其特征在于,还包括:数据源监测模块,根据数据源的使用频率,判断是否需要清理创建的运行时数据源信息;如果需要,则将运行时数据源对象从动态数据源管理模块和运行时数据源缓存模块中移除。4.根据权利要求1所述的创建运行时数据源并自动切换的系统,其特征在于:数据源ID和数据源对象的键值对映射属性是一个Map数据类型,key为数据源ID,value为数据源对象。5.一种创建运行时数据源并自动切换的...
【专利技术属性】
技术研发人员:汪浩,李郃,郑华忠,
申请(专利权)人:好享家舒适智能家居股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。