一种Java动态数据源的实现方法与流程

文档序号:36808762发布日期:2024-01-23 12:39阅读:16来源:国知局
一种Java动态数据源的实现方法与流程

本发明涉及数据库,尤其涉及一种java动态数据源的实现方法。


背景技术:

1、数据库是由若干个相关数据的集合组成,包括文本、数字、图像、音频等各种类型的数据,它们被存储在计算机系统中,以便于对这些数据进行管理、处理和访问,广泛用于各种应用程序和业务领域。常见的数据库软件有mysql、oracle、sql server、postgresql等。这些软件具有管理、查询、更新、删除数据的功能,可以通过编写sql语句来操作数据库中的数据。

2、数据源负责管理和协调应用程序与数据库之间的交互,保证了应用程序与目标数据之间交互的规范和协议,在数据源中存储了所有建立数据库连接的信息。其中数据源定义了位置信息,用户验证信息和交互时所需的一些特性的配置,同时它封装了如何建立与数据源的连接,向外暴露获取连接的接口,应用程序连接数据库无需关注其底层是如何建立的。动态数据源允许应用程序在不修改代码,不发布重启的前提下,应需求调整其数据源相关配置,例如在线上应用业务高峰期增加数据库从库实例。

3、当用java相关技术方案开发的应用发展进化到一定的规模之后,因业务复杂度或性能等方面的要求会驱使同一个项目使用多个逻辑数据库,以存储不同业务模块的数据。而且在实际应用中,也会存在同样的应用程序在不同的客户运行环境中运行时,需要对应采用不同的数据库连接结构。针对这种多数据源的情况,通常采用配置信息硬编码的方案,或静态配置的方案,但随着应用场景的复杂化,这些方案已不能高效准确地解决多数据源的相关问题,例如不能实现动态新增数据节点,不能使同样的逻辑数据库在不同的环境中分表或不分表。


技术实现思路

1、本发明的目的是克服上述现有技术的缺点,提供一种可灵活、高效地使用多个数据库,动态新增从数据库的java动态数据源的实现方法。

2、本发明是通过以下技术方案来实现的:

3、一种java动态数据源的实现方法,包括如下步骤:

4、s1、在java中自定义类budoroutingdatasource,实现数据源的接口功能。

5、在自定义类budoroutingdatasource中自定义getconnection方法,所述getconnection方法的作用为返回一个代理类lazyinitroutingconnection,所述代理类lazyinitroutingconnection用于实现connection接口。

6、传统的datasource接口中最核心的方法getconnection,其作用为返回一个数据库连接,在标准中,数据库连接实现connection接口,传统的技术方案实现中,此处就会直接建立一个应用程序到数据库的连接。而本发明中,则是返回一个代理类lazyinitroutingconnection,以实现connection接口。

7、所述connection接口自定义的方法包括setautocommit、preparestatement、commit等,通过对这些方法的具体设置实现本发明的技术方案。

8、setautocommit:用于设置数据库事务的自动提交行为,可设置启用或禁止自动提交模式。

9、preparestatement:用于开始执行sql语句;运行preparestatement时才会真实的获取数据库连接。

10、commit:用于提交sql语句。本发明中可通过该方法从缓存中得到所有实际的数据库连接,分别提交实际的数据库连接事务。

11、s2、java应用程序通过service方法开启数据库事务,调用budoroutingdatasource.getconnection方法,返回代理类lazyinitroutingconnection,获取数据库连接。

12、s3、通过lazyinitroutingconnection的setautocommit、settransactionisolation方法设置数据库事务相关属性,并以逻辑数据库名为参数,暂存数据库事务相关属性,缓存实际的数据库连接对象;其中,通过setautocommit设置禁止数据库连接自动提交。

13、s4、dao层方法注解指定数据源,运行budoroutingdatasourceinterceptor获取方法上的注解信息,并暂存注解信息,注解信息包含指定方法应进入的数据库。

14、s5、连接业务指定的数据库:lazyinitroutingconnection根据s4步骤中得到的注解信息,初始化对应的真实的数据库连接,并通过preparestatement将s3步骤中暂存的数据库事务相关属性设置到真实的数据库连接上;使用真实的数据库连接执行满足业务需要的数据库读写操作,通过调用commit方法分别提交真实的数据库连接事务。

15、s6、提交真实的数据库连接事务后,清理资源;给应用程序返回数据库连接结果。

16、进一步地,所述s6步骤中清理资源为关闭数据库连接或将将数据库连接归还给数据库连接池。

17、本发明以比较规范、简洁的方式为java应用程序提供动态数据源相关解决方案,使应用具备灵活的动态配置和调整数据库连接信息的能力。在业务需要动态数据源的场景下,本发明方案可为业务系统提供了高可靠、高适应性、高灵活度的解决方案,使系统具备高效、灵活使用多个业务数据库,动态新增从数据库的能力,可大大提高相关场景下软件的开发维护效率和运行可靠性。



技术特征:

1.一种java动态数据源的实现方法,其特征在于,包括如下步骤:

2.根据权利要求1所述的一种java动态数据源的实现方法,其特征在于,所述s6步骤中清理资源为关闭数据库连接或将将数据库连接归还给数据库连接池。


技术总结
一种Java动态数据源的实现方法,包括如下步骤:S1、在Java中自定义类BudoRoutingDataSourceyi以及在其中自定义getConnection方法;S2、Java应用程序通过Service方法开启数据库事务,调用BudoRoutingDataSource.getConnection方法,返回代理类LazyInitRoutingConnection,获取数据库连接;S3、通过LazyInitRoutingConnection中的方法设置数据库事务相关属性,并暂存数据库事务相关属性;S4、Dao层方法注解指定数据源;S5、LazyInitRoutingConnection根据得到的注解信息,初始化对应的真实的数据库连接,并将暂存的数据库事务相关属性设置到真实的数据库连接上,连接真实的数据库进行读写操作;S6、提交真实的数据库连接事务,清理资源,返回数据。本发明方案可使业务系统具备高效、灵活使用多个业务数据库,动态新增从数据库的能力,大大提高相关场景下软件的开发维护效率和运行可靠性。

技术研发人员:黎明伟,张小峰,吴汶泽
受保护的技术使用者:上海贝锐信息科技股份有限公司
技术研发日:
技术公布日:2024/1/22
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1