数据事务处理方法、装置、计算机设备及存储介质与流程

未命名 08-29 阅读:92 评论:0


1.本技术涉及大数据技术领域,尤其涉及一种数据事务处理方法、装置、计算机设备及存储介质。


背景技术:

2.关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到一定数量级以后,通过数据库本身的优化措施仍不能满足性能要求。因此,当前会基于分库分表将业务数据进行切分,并分散给多个数据库,以减少单个数据库的负担,从而提高性能,其中,分库分表是水平分片的解决方案,能有效的缓解单机和单库带来的性能瓶颈和压力,突破网络io、硬件资源、连接数的瓶颈,分库分表是将数据按某字段根据一定的策略例如哈希,范围等进行数据分片,将一份数据拆成多份并保存在多个数据库或多张表中,解决单库数据量过大、高并发的性能瓶颈,提升系统稳定性和负载能力。
3.对于数据库访问层事务处理,springjdbc提供的声明式事务已经成为了事实标准,springjdbc的声明式事务管理在springboot自动装配情况下仅支持单一数据库事务处理,即在业务开始前获取数据库获取连接并开启事务。而对于基于分库分表创建的具有多数据库的场景,springjdbc因无法定位业务即将访问的数据库,无法开启相应的事务。
4.为实现基于springjdbc的多数据库的事务处理,现有技术采用springjdbc提供事务管理器开启所有的数据库的方式,在以确保基于springjdbc处理的业务数据能够在目标数据库中进行数据处理,目标数据库是多数据库中的其中一个数据库。
5.然而,发明人发现,这种方式将会导致每次处理一个业务数据时,均需开启所有的数据库,导致无效占用过多的数据库连接的情况发生,造成降低多数据库的性能的情况发生。


技术实现要素:

6.本技术提供一种数据事务处理方法、装置、计算机设备及存储介质,用以解决当前采用springjdbc提供事务管理器开启所有的数据库的方式,在以确保基于springjdbc处理的业务数据能够在目标数据库中进行数据处理,导致每次处理一个业务数据时,均需开启所有的数据库,导致无效占用过多的数据库连接的情况发生,造成降低多数据库的性能的情况发生的问题。
7.第一方面,本技术提供一种基于spring jdbc的数据事务处理方法,应用于具有至少一个数据库的数据集群,所述方法包括:
8.调用spring jdbc组件拦截一个业务数据;
9.调用所述spring jdbc组件中的事务管理器根据预置的代理数据库对所述业务数据进行业务处理得到代理事务信息,并将所述代理事务信息载入预置的代理连接中,其中,所述代理事务信息是定义了在数据库中对业务数据进行数据处理的事务上下文,所述数据
处理包括:新增处理、和/或删除处理、和/或修改处理、和/或查询处理;
10.调用预置的mybatis组件根据所述业务数据得到数据库名,并将所述数据集群中与所述数据库名对应的数据库设为真实数据库,及将具有所述代理事务信息的代理连接与所述数据库名关联;
11.调用所述mybatis组件创建与所述真实数据库之间的真实连接;
12.将所述代理连接中的代理事务信息输出至所述真实连接,并执行具有所述代理事务信息的真实连接,以根据所述代理事务信息对所述真实数据库中的数据进行数据处理。
13.上述方案中,所述调用spring jdbc组件拦截一个业务数据,包括:
14.调用所述spring jdbc组件创建注解和与所述注解关联的拦截器,其中,所述注解是所述spring jdbc组件用于接收业务数据的入口;
15.若调用所述事务管理器通过所述拦截器拦截所述注解接收到的一个业务数据。
16.上述方案中,所述调用所述spring jdbc组件中的事务管理器根据预置的代理数据库对所述业务数据进行业务处理得到代理事务信息,包括:
17.调用所述事务管理器根据所述代理数据库构建代理连接,所述代理连接是与所述代理数据库之间的通信连接;
18.调用所述事务管理器根据预置的业务运算规则对所述业务数据进行业务处理,得到代理事务信息。
19.上述方案中,所述调用预置的mybatis组件根据所述业务数据得到数据库名,包括:
20.调用所述mybatis组件中的映射接口提取所述业务数据中的业务要素;
21.根据预置的分库分表规则对所述业务要素进行计算,得到所述业务数据的数据库名;或
22.对所述业务要素进行哈希运算得到哈希摘要,并根据预置的计算规则对所述哈希摘要进行计算,得到所述业务数据的数据库名。
23.上述方案中,所述调用所述mybatis组件创建与所述真实数据库之间的真实连接,包括:
24.若确定所述spring jdbc组件生成代理事务信息,则调用所述mybatis组件中的事务工厂生成真实事务,所述真实事务用于对所述真实数据库进行事务提交、或事务关闭、或事务回滚;
25.调用所述mybatis组件中的事务工厂根据所述真实事务创建真实连接,所述真实连接是与所述真实数据库之间的通信连接。
26.上述方案中,所述调用所述mybatis组件中的事务工厂生成真实事务,包括:
27.所述事务工厂若确定所述代理事务信息的类型为提交类型,则根据所述提交类型生成事务提交的真实事务;
28.所述事务工厂若确定所述代理事务信息的类型为关闭类型,则根据所述提交类型生成事务关闭的真实事务;
29.所述事务工厂若确定所述代理事务信息的类型为回滚类型,则根据所述提交类型生成事务回滚的真实事务。
30.上述方案中,所述调用所述mybatis组件中的事务工厂根据所述真实事务创建真
实连接,包括:
31.所述事务工厂提取所述真实事务中的数据库名,并与所述数据库名对应的真实数据库之间构建连接线路,或将连接线路切换至所述真实数据库;
32.将所述真实事务载入所述连接线路得到真实连接,所述真实连接用于对所述真实数据库执行所述真实事务。
33.上述方案中,所述将所述代理连接中的代理事务信息输出至所述真实连接,包括:
34.获取与所述真实连接对应的真实数据库的数据库名,并获取与所述数据库名关联的代理连接;
35.从所述代理连接中提取代理事务信息,并将提取到的代理事务信息载入所述真实连接。
36.上述方案中,所述执行具有所述代理事务信息的真实连接,包括:
37.调用所述spring jdbc组件,通过所述真实连接访问所述真实数据库;
38.调用所述spring jdbc组件根据所述代理事务信息,对所述真实数据库中与所述代理事务信息对应的数据进行数据处理。
39.上述方案中,所述调用spring jdbc组件拦截一个业务数据之前,所述方法还包括:
40.启动spring jdbc组件的spring容器,将所述代理数据库输入到所述spring容器的配置文件;
41.在所述配置文件中的代理数据库上配置bean标签,以在所述spring jdbc组件的事务管理器中进行bean定义。
42.第二方面,本技术提供一种基于spring jdbc的数据事务处理装置,与具有至少一个数据库的数据集群连接,所述装置包括:
43.输入拦截模块,用于调用spring jdbc组件拦截一个业务数据;
44.事务生成模块,用于调用所述spring jdbc组件中的事务管理器根据预置的代理数据库对所述业务数据进行业务处理得到代理事务信息,并将所述代理事务信息载入预置的代理连接中,其中,所述代理事务信息是定义了在数据库中对业务数据进行数据处理的事务上下文,所述数据处理包括:新增处理、和/或删除处理、和/或修改处理、和/或查询处理;
45.真实识别模块,用于调用预置的mybatis组件根据所述业务数据得到数据库名,并将所述数据集群中与所述数据库名对应的数据库设为真实数据库,及将具有所述代理事务信息的代理连接与所述数据库名关联;
46.连接构建模块,用于调用所述mybatis组件创建与所述真实数据库之间的真实连接;
47.事务处理模块,用于将所述代理连接中的代理事务信息输出至所述真实连接,并执行具有所述代理事务信息的真实连接,以根据所述代理事务信息对所述真实数据库中的数据进行数据处理。
48.第三方面,本技术提供一种计算机设备,包括:处理器,以及与所述处理器通信连接的存储器;
49.所述存储器存储计算机执行指令;
50.所述处理器执行所述存储器存储的计算机执行指令,以实现上述的方法。
51.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现上述的方法。
52.第五方面,本技术提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现上述的方法。
53.本技术提供的一种数据事务处理方法、装置、计算机设备及存储介质,通过spring jdbc组件拦截业务数据,以便于后续根据业务数据得到代理事务信息,避免spring jdbc组件直接根据业务数据启动数据集群中所有数据库。
54.通过spring jdbc组件中的事务管理器通过与代理数据库之间进行代理连接,以跳过与数据集群的数据库构建真实的连接的步骤,对业务数据进行业务处理并得到代理事务信息,避免了进行业务处理时需要与所有数据库连接的情况发生,进而避免了无效占用过多的数据库连接的情况发生。通过将所述代理事务信息载入预置的代理连接中,用于将代理连接虚拟为真实的连接,以便于后续能够将代理连接中的信息同步到真实连接。
55.通过mybatis组件根据预置的分库分表规则对所述业务数据进行逻辑处理得到数据库名,并将所述数据集群中与所述数据库名对应的数据库设为真实数据库,以实现获知与业务数据对应的真实数据库的技术效果。
56.通过创建与真实数据库之间的真实连接,为后续在真实数据库中进行数据处理提供基础。
57.通过spring jdbc组件将所述代理连接中的代理事务信息输出至所述真实连接,使得真实连接具有执行数据处理的基础,通过执行具有代理事务信息的真实连接,实现根据业务数据对真实数据库中的数据进行处理的效果。
附图说明
58.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
59.图1为本技术的应用场景的结构示意图;
60.图2为本技术一种数据事务处理方法的实施例1的流程图;
61.图3为本技术一种数据事务处理方法的实施例2的流程图;
62.图4为本技术一种数据事务处理装置的实施例3的模块图;
63.图5为本发明计算机设备中计算机设备的硬件结构示意图。
64.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。
具体实施方式
65.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
66.需要说明的是,本技术所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
67.需要说明的是,本技术一种数据事务处理方法、装置、计算机设备及存储介质可用于大数据技术领域,也可用于除大数据技术领域之外的任意领域,本技术数据事务处理方法、装置、计算机设备及存储介质的应用领域不做限定。
68.本技术的具体应用场景是:请参阅图1,运行有一种基于spring jdbc的数据事务处理方法的服务器11,与具有至少一个数据库121的数据集群12,服务器11还与至少一个客户端13连接,客户端13用于向服务器11发送业务数据。
69.服务器11调用spring jdbc组件拦截一个业务数据。
70.服务器11调用spring jdbc组件中的事务管理器根据预置的代理数据库对业务数据进行业务处理得到代理事务信息,并将代理事务信息载入预置的代理连接中,其中,代理事务信息是定义了在数据库中对业务数据进行数据处理的事务上下文,数据处理包括:新增处理、和/或删除处理、和/或修改处理、和/或查询处理。
71.服务器11调用预置的mybatis组件根据业务数据得到数据库名,并将数据集群12中与数据库名对应的数据库设为真实数据库122,及将具有代理事务信息的代理连接与数据库名关联。
72.服务器11调用mybatis组件创建与真实数据库122之间的真实连接。
73.服务器11将代理连接中的代理事务信息输出至真实连接,并执行具有代理事务信息的真实连接,以根据代理事务信息对真实数据库122中的数据进行数据处理。
74.本技术提供的数据事务处理方法,通过在理财机构联盟内,客户只要完成一次风险测评,整个联盟链即可共享该客户的风险测评信息。而且应用大数据的技术,保证了客户风险测评具有不可篡改的特性,保证了信息的准确性,提高了风险控制的效率。由于采用加密技术,客户信息不易泄露和破解。旨在解决现有技术的如上技术问题。
75.下面以具体地实施例对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。
76.实施例1:
77.请参阅图2,本技术提供一种基于spring jdbc的数据事务处理方法,应用于具有至少一个数据库的数据集群,方法包括:
78.s201:调用springjdbc组件拦截一个业务数据。
79.本步骤中,spring的jdbc模块用于提供声明式事务框架标准与实现,负责数据库资源管理和错误处理,大大简化了开发人员对数据库的操作,使得开发人员可以从紧琐的数据库操作中解脱出来,从而将更多的精力投入到编写业务逻辑当中。
80.通过spring jdbc组件拦截业务数据,以便于后续根据业务数据得到代理事务信息,避免spring jdbc组件直接根据业务数据启动数据集群中所有数据库。
81.于本实施例中,业务数据是声明式事务,声明式事务是通过注解的方式声明事务作用域的范围,该范围内的所有操作将具有原子性。
82.在一个优选的实施例中,调用spring jdbc组件拦截一个业务数据,包括:
83.调用spring jdbc组件创建注解和与注解关联的拦截器,其中,注解是spring jdbc组件用于接收业务数据的入口;
84.若调用事务管理器通过拦截器拦截注解接收到的一个业务数据。
85.示例性地,通过在数据集群中设置@transactional注解,并将拦截器与该注解关联,当数据集群接收到业务数据并运行注解时,则直接调用拦截器拦截该业务数据,降低了对数据集群的代码入侵。
86.s202:调用spring jdbc组件中的事务管理器根据预置的代理数据库对业务数据进行业务处理得到代理事务信息,并将代理事务信息载入预置的代理连接中,其中,代理事务信息是定义了在数据库中对业务数据进行数据处理的事务上下文,数据处理包括:新增处理、和/或删除处理、和/或修改处理、和/或查询处理。
87.本步骤中,由于现有技术中的spring jdbc组件中的事务管理器是与数据集群中所有的数据库建立连接后,再对业务数据进行业务处理并得到代理事务信息,导致事务管理器无效占用过多的数据库连接的情况发生,造成降低多数据库的性能的情况发生。
88.对此,本步骤提供代理数据库,代理数据库是一个用于创建代理连接的抽象的数据库对象,通过spring jdbc组件中的事务管理器通过与代理数据库之间进行代理连接,以跳过与数据集群的数据库构建真实的连接的步骤,对业务数据进行业务处理并得到代理事务信息,避免了进行业务处理时需要与所有数据库连接的情况发生,进而避免了无效占用过多的数据库连接的情况发生。通过将代理事务信息载入预置的代理连接中,用于将代理连接虚拟为真实的连接,以便于后续能够将代理连接中的信息同步到真实连接。
89.于本实施例中,spring提供声明式事务管理,基于aop实现,无需编写任何事务管理代码,配置即可用,商化了传统的事务管理流程,并且在一定程度上减少了开发者的工作量。事务管理器用于控制业务数据的安全访问,对于数据修改,要么都执行,要么都不执行。代理事务信息可为根据业务数据在数据库中进行数据处理的sql语句。
90.在一个优选的实施例中,调用spring jdbc组件中的事务管理器根据预置的代理数据库对业务数据进行业务处理得到代理事务信息,包括:
91.调用事务管理器根据代理数据库构建代理连接,代理连接是与代理数据库之间的通信连接;
92.调用事务管理器根据预置的业务运算规则对业务数据进行业务处理,得到代理事务信息。
93.示例性地,业务运算规则是对业务数据进行业务处理的计算机规则,例如:业务数据是:abcc向bbaa转账1000元,那么,得到的代理事务信息是:操作事务1-abcc账户减少1000元,操作事务2-bbaa账户增加1000元。
94.需要说明的是,spring jdbc组件中的至少一个事务管理器用于充当某一特定平台的事务实现的门面,事务管理器包括:
95.datasourcetransactionmanager:位于org.springframework.jdbc.datasource包中,数据库事务管理器,提供对单个javax.sql.datasource事务管理,用于spring jdbc抽象框架、ibatis或mybatis框架的事务管理;jdotransactionmanager:位于org.springframework.orm.jdo包中,提供对单个javax.jdo.persistencemanagerfactory
事务管理,用于集成jdo框架时的事务管理;jpatransactionmanager:位于org.springframework.orm.jpa包中,提供对单个javax.persistence.entitymanagerfactory事务支持,用于集成jpa实现框架时的事务管理;hibernatetransactionmanager:位于org.springframework.orm.hibernate3包中,提供对单个org.hibernate.sessionfactory事务支持,用于集成hibernate框架时的事务管理;jtatransactionmanager:位于org.springframework.transaction.jta包中,提供对分布式事务管理的支持,并将事务管理委托给java ee应用服务器事务管理器;oc4jjtatransactionmanager:位于org.springframework.transaction.jta包中,spring提供的对oc4j10.1.3+应用服务器事务管理器的适配器,此适配器用于对应用服务器提供的高级事务的支持;websphereuowtransactionmanager:位于org.springframework.transaction.jta包中,spring提供的对websphere 6.0+应用服务器事务管理器的适配器,此适配器用于对应用服务器提供的高级事务的支持;weblogicjtatransactionmanager:位于org.springframework.transaction.jta包中,spring提供的对weblogic 8.1+应用服务器事务管理器的适配器,此适配器用于对应用服务器提供的高级事务的支持。
96.s203:调用预置的mybatis组件根据业务数据得到数据库名,并将数据集群中与数据库名对应的数据库设为真实数据库,及将具有代理事务信息的代理连接与数据库名关联。
97.本步骤中,通过mybatis组件根据预置的分库分表规则对业务数据进行逻辑处理得到数据库名,并将数据集群中与数据库名对应的数据库设为真实数据库,以实现获知与业务数据对应的真实数据库的技术效果。mybatis组件是用于提供数据库访问层orm框架实现,简化数据库数据到对象的映射的组件。orm是对象关系映射(object relational mapping,简称orm)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。orm框架是连接数据库的桥梁,只要提供了持久化类与表的映射关系,orm框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。
98.在一个优选的实施例中,调用预置的mybatis组件根据业务数据得到数据库名,包括:
99.调用mybatis组件中的映射接口提取业务数据中的业务要素;
100.根据预置的分库分表规则对业务要素进行计算,得到业务数据的数据库名;或
101.对业务要素进行哈希运算得到哈希摘要,并根据预置的计算规则对哈希摘要进行计算,得到业务数据的数据库名。
102.示例性地,业务要素是描述业务数据中的信息的元数据,假设业务要素为用户名和账户,根据业务要素从业务数据中获得用户名:abcc和用户名:bbaa,abcc的账户:m行n支行,bbaa的账户:p行q支行。
103.通过分库分表规则对abcc和m行n支行进行计算,得到保存abcc在m行n支行的账户数据的数据库t1,通过分库分表规则对bbaa和p行q支行进行计算,得到保存bbaa在p行q支行的账户数据的数据库t2。
104.哈希运算是通过哈希算法对业务要素进行运算得到哈希摘要的计算机算法,哈希算法是将任意长度的二进制值串映射为固定长度的二进制值串,通过原始数据映射之后得到的二进制值串就是哈希值。于本实施例中,通过哈希算法对abcc和m行n支行进行哈希运
算得到哈希摘要1,通过哈希算法对bbaa和p行q支行进行哈希运算得到哈希摘要2,
105.通过计算规则(例如:定义有哈希摘要和数据库名之间映射关系的映射表)获取与哈希摘要1对应的数据库名:数据库t1;及获取与哈希摘要2对应的数据库名:数据库t2。
106.s204:调用mybatis组件创建与真实数据库之间的真实连接。
107.本步骤中,通过创建与真实数据库之间的真实连接,为后续在真实数据库中进行数据处理提供基础。
108.在一个优选的实施例中,调用mybatis组件创建与真实数据库之间的真实连接,包括:
109.若确定spring jdbc组件生成代理事务信息,则调用mybatis组件中的事务工厂生成真实事务,真实事务用于对真实数据库进行事务提交、或事务关闭、或事务回滚;
110.调用mybatis组件中的事务工厂根据真实事务创建真实连接,真实连接是与真实数据库之间的通信连接。
111.示例性地,代理事务信息是:操作事务1-abcc账户减少1000元,操作事务2-bbaa账户增加1000元;保存abcc在m行n支行的账户数据的数据库为数据库t1,保存bbaa在p行q支行的账户数据的数据库为数据库t2;事务工厂根据该代理事务信息生成在数据库t1中进行事务提交的真实事务,在数据库t2中进行事务提交的真实事务。
112.如果abcc要求bbaa退款,生成的代理事务信息则是:操作事务1-abcc账户增加1000元,操作事务2-bbaa账户减少1000元;基于上述举例,事务工厂将生成在数据库t1进行“abcc账户减少1000元”的事务回滚的真实事务,事务工厂根据该代理事务信息生成在数据库t1中进行事务回滚的真实事务,在数据库t2中进行事务回滚的真实事务。
113.如果abcc和bbaa之间的交易结束,基于上述举例,事务工厂将生成在数据库t1中进行事务关闭的真实事务,在数据库t2中进行事务关闭的真实事务。
114.需要说明的是,事务工厂是transactionfactory,其用于通过提供的主要接口newtransaction(),并根据数据库连接connection来创建事务;或jdbctransactionfactory,其用于创建jdbctransaction事务;或managedtransactionfactory,其用于创建managedtransaction事务;或springmanagedtransactionfactory,其用于创建springmanagedtransaction。
115.进一步地,调用mybatis组件中的事务工厂生成真实事务,包括:
116.事务工厂若确定代理事务信息的类型为提交类型,则根据提交类型生成事务提交的真实事务;
117.事务工厂若确定代理事务信息的类型为关闭类型,则根据提交类型生成事务关闭的真实事务;
118.事务工厂若确定代理事务信息的类型为回滚类型,则根据提交类型生成事务回滚的真实事务。
119.示例性地,代理事务信息的类型包括提交类型、关闭类型和回滚类型,代理事务信息中的类型字段记载了代理事务信息的类型,基于上述举例,如果代理事务信息是:操作事务1-abcc账户减少1000元,操作事务2-bbaa账户增加1000元;保存abcc在m行n支行的账户数据的数据库为数据库t1,保存bbaa在p行q支行的账户数据的数据库为数据库t2;类型字段是提交类型;其生成的真实事务将表征生成在数据库t1进行“abcc账户减少1000元”的事
务提交的真实事务,事务工厂将生成在数据库t2进行“bbaa账户增加1000元”的事务提交。
120.如果代理事务信息是:操作事务1-abcc账户减少1000元,操作事务2-bbaa账户增加1000元;保存abcc在m行n支行的账户数据的数据库为数据库t1,保存bbaa在p行q支行的账户数据的数据库为数据库t2;字段类型是回滚类型;其生成的真实事务将表征“abcc账户增加1000元”在数据库t2进行“bbaa账户减少1000元”的事务回滚。
121.如果代理事务信息是:如果abcc和bbaa之间的交易结束,字段类型是关闭类型,其生成的真实事务将表征关闭数据库t1中abcc账户和数据库t2中bbaa账户的真实事务。
122.进一步地,调用mybatis组件中的事务工厂根据真实事务创建真实连接,包括:
123.事务工厂提取真实事务中的数据库名,并与数据库名对应的真实数据库之间构建连接线路,或将连接线路切换至真实数据库;
124.将真实事务载入连接线路得到真实连接,真实连接用于对真实数据库执行真实事务。
125.示例性地,由于jdbc驱动程序与数据库的连接是以对象的形式表示的,所以创建数据库的连接也称创建数据库连接对象。想要连接数据库,调用mybatis组件中的事务工厂使用驱动程序中的drivermanager类中的静态方法来创建与真实数据库中的线路连接。常用的方法:public static connection getconnection(string url,string user,string password);创建驱动程序到指定数据库url的连接。其中url提供了一种标识数据库的方法,user为用户名,password为密码public static driver getdriver(stringurl)返回url所指定的数据库连接的驱动程序
126.基于上述举例,真实事务中记载的数据库包括数据库t1和数据库t2,那么就与数据库t1和数据库t2建立线路连接,并将在数据库t1进行“abcc账户减少1000元”的事务提交的真实事务,事务工厂将生成在数据库t2进行“bbaa账户增加1000元”的事务,分别载入与数据库t1之间的连接线路和与数据库t2之间的连接线路。
127.s205:将代理连接中的代理事务信息输出至真实连接,并执行具有代理事务信息的真实连接,以根据代理事务信息对真实数据库中的数据进行数据处理。
128.本步骤中,通过spring jdbc组件将代理连接中的代理事务信息输出至真实连接,使得真实连接具有执行数据处理的基础,通过执行具有代理事务信息的真实连接,实现根据业务数据对真实数据库中的数据进行处理的效果。
129.示例性地,提取将代理连接中的代理事务信息,并创建一个statement接口对象,调用statement接口对象,将代理事务信息载入真实连接中,通过真实连接中的代理事务信息对真实数据库(即:数据库t1和数据库t2)进行数据处理(在数据库t1的abcc账户减少1000元,在数据库t2的bbaa账户增加1000元)。
130.在一个优选的实施例中,将代理连接中的代理事务信息输出至真实连接,包括:
131.获取与真实连接对应的真实数据库的数据库名,并获取与数据库名关联的代理连接;
132.从代理连接中提取代理事务信息,并将提取到的代理事务信息载入真实连接。
133.示例性地,提取数据库名,获取与该数据库名关联的代理连接,以确保将代理连接中的代理事务信息能够准确的载入相应的真实连接中,确保了真实连接的可靠性和准确性。
134.在一个优选的实施例中,执行具有代理事务信息的真实连接,包括:
135.调用spring jdbc组件,通过真实连接访问真实数据库;
136.调用spring jdbc组件根据代理事务信息,对真实数据库中与代理事务信息对应的数据进行数据处理。
137.示例性地,spring jdbc组件通过statement接口对象,将代理事务信息输出至真实数据库,并在真实数据库中运行该代理事务信息,实现在真实数据库中对业务数据进行数据处理。
138.实施例2:
139.请参阅图3,本技术提供一种基于spring jdbc的数据事务处理方法,应用于具有至少一个数据库的数据集群,方法包括:
140.s301:启动springjdbc组件的spring容器,将代理数据库输入到spring容器的配置文件;
141.在配置文件中的代理数据库上配置bean标签,以在spring jdbc组件的事务管理器中进行bean定义。
142.本步骤中,springjdbc组件用于处理声明式事务,所谓声明式事务,就是通过配置的方式,比如通过配置文件(xml)或者注解的方式,告诉spring,哪些方法需要spring帮忙管理事务,然后开发者只用关注业务代码,而事务的事情spring自动帮我们控制。比如注解的方式,只需在方法上面加一个@transaction注解,那么方法执行之前spring会自动开启一个事务,方法执行完毕之后,会自动提交或者回滚事务,而方法内部没有任何事务相关代码,用起来特别的方法。
143.spring容器是spring框架的核心,是用来管理对象的。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。
144.示例性地,通过在配置文件中的代理数据库上配置bean标签,以在spring jdbc组件中进行bean定义,定义bean的方式为声明式,声明式可以理解为用一个的标记去标识相关的信息,代码底层再对这些标识符进行一个解析处理。
145.如果以xml配置文件的方式启动spring容器,那么就可以在xml配置文件中使用bean标签完成对一个bean的定义,如:在配置类里面,使用@bean注解作为bean标签,实现在事务管理器中进行bean定义。
146.如果在配置文件中的配置类上配置bean标签,则使用@component及其同类型的注解(@controller、@service、@repository)注释在配置类上,以实现配置类能够以bean的形式注入到spring的容器中。
147.s302:调用spring jdbc组件拦截一个业务数据。
148.本步骤与实施例1中的s201一致,故在此不做赘述。
149.s303:调用spring jdbc组件中的事务管理器根据预置的代理数据库对业务数据进行业务处理得到代理事务信息,并将代理事务信息载入预置的代理连接中,其中,代理事务信息是定义了在数据库中对业务数据进行数据处理的事务上下文,数据处理包括:新增处理、和/或删除处理、和/或修改处理、和/或查询处理。
150.本步骤与实施例1中的s202一致,故在此不做赘述。
151.s304:调用预置的mybatis组件根据业务数据得到数据库名,并将数据集群中与数
据库名对应的数据库设为真实数据库,及将具有代理事务信息的代理连接与数据库名关联。
152.本步骤与实施例1中的s203一致,故在此不做赘述。
153.s305:调用mybatis组件创建与真实数据库之间的真实连接。
154.本步骤与实施例1中的s204一致,故在此不做赘述。
155.s306:将代理连接中的代理事务信息输出至真实连接,并执行具有代理事务信息的真实连接,以根据代理事务信息对真实数据库中的数据进行数据处理。
156.本步骤与实施例1中的s205一致,故在此不做赘述。
157.实施例3:
158.请参阅图4,本技术提供一种基于spring jdbc的数据事务处理装置1,与具有至少一个数据库的数据集群连接,装置包括:
159.输入拦截模块42,用于调用spring jdbc组件拦截一个业务数据;
160.事务生成模块43,用于调用spring jdbc组件中的事务管理器根据预置的代理数据库对业务数据进行业务处理得到代理事务信息,并将代理事务信息载入预置的代理连接中,其中,代理事务信息是定义了在数据库中对业务数据进行数据处理的事务上下文,数据处理包括:新增处理、和/或删除处理、和/或修改处理、和/或查询处理;
161.真实识别模块44,用于调用预置的mybatis组件根据业务数据得到数据库名,并将数据集群中与数据库名对应的数据库设为真实数据库,及将具有代理事务信息的代理连接与数据库名关联;
162.连接构建模块45,用于调用mybatis组件创建与真实数据库之间的真实连接;
163.事务处理模块46,用于将代理连接中的代理事务信息输出至真实连接,并执行具有代理事务信息的真实连接,以根据代理事务信息对真实数据库中的数据进行数据处理。
164.可选的,基于spring jdbc的数据事务处理装置1,还包括:
165.配置定义模块11,用于启动spring jdbc组件的spring容器,将代理数据库输入到spring容器的配置文件;在配置文件中的代理数据库上配置bean标签,以在spring jdbc组件的事务管理器中进行bean定义。
166.实施例4:
167.图5是根据一示例性实施例示出的一种计算机设备的框图,该计算机设备5可以是信息管理系统1中的控制电路,该控制电路是指信息管理系统中的一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行数据事务处理方法。
168.具体地,计算机设备5,包括:处理器52以及与处理器52通信连接的存储器51;存储器存储计算机执行指令;
169.处理器执行存储器51存储的计算机执行指令,以实现上述的数据事务处理方法,其中,数据事务处理装置的组成部分可分散于不同的计算机设备中,计算机设备5可以是执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个应用服务器所组成的服务器集群)等。本实施例的计算机设备至少包括但不限于:可通过系统总线相互通信连接的存储器51、
处理器52,如图5所示。需要指出的是,图5仅示出了具有组件-的计算机设备,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。本实施例中,存储器51(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器51可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,存储器51也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。当然,存储器51还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,存储器51通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例三的数据事务处理装置的程序代码等。此外,存储器51还可以用于暂时地存储已经输出或者将要输出的各类数据。处理器52在一些实施例中可以是中央处理器(central processing unit,cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器52通常用于控制计算机设备的总体操作。本实施例中,处理器52用于运行存储器51中存储的程序代码或者处理数据,例如运行数据事务处理装置,以实现上述实施例的数据事务处理方法。
170.上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本技术各个实施例方法的部分步骤。应理解,上述处理器可以是中央处理单元(central processing unit,简称cpu),还可以是其它通用处理器、数字信号处理器(digital signal processor,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。存储器可能包含高速ram存储器,也可能还包括非易失性存储nvm,例如至少一个磁盘存储器,还可以为u盘、移动硬盘、只读存储器、磁盘或光盘等。
171.为实现上述目的,本技术还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘、服务器、app应用商城等等,其上存储有计算机执行指令,程序被处理器52执行时实现相应功能。本实施例的计算机可读存储介质用于存储实现数据事务处理方法的计算机执行指令,被处理器52执行时实现上述实施例的数据事务处理方法。
172.上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
173.一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存
储介质可以位于专用集成电路(application specific integrated circuits,简称asic)中。当然,处理器和存储介质也可以作为分立组件存在于计算机设备或主控设备中。
174.本技术提供一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现上述的数据事务处理方法。
175.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
176.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由下面的权利要求书指出。
177.应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求书来限制。

技术特征:
1.一种基于spring jdbc的数据事务处理方法,其特征在于,应用于具有至少一个数据库的数据集群,所述方法包括:调用spring jdbc组件拦截一个业务数据;调用所述spring jdbc组件中的事务管理器根据预置的代理数据库对所述业务数据进行业务处理得到代理事务信息,并将所述代理事务信息载入预置的代理连接中,其中,所述代理事务信息是定义了在数据库中对业务数据进行数据处理的事务上下文,所述数据处理包括:新增处理、和/或删除处理、和/或修改处理、和/或查询处理;调用预置的mybatis组件根据所述业务数据得到数据库名,并将所述数据集群中与所述数据库名对应的数据库设为真实数据库,及将具有所述代理事务信息的代理连接与所述数据库名关联;调用所述mybatis组件创建与所述真实数据库之间的真实连接;将所述代理连接中的代理事务信息输出至所述真实连接,并执行具有所述代理事务信息的真实连接,以根据所述代理事务信息对所述真实数据库中的数据进行数据处理。2.根据权利要求1所述的数据事务处理方法,其特征在于,所述调用spring jdbc组件拦截一个业务数据,包括:调用所述spring jdbc组件创建注解和与所述注解关联的拦截器,其中,所述注解是所述spring jdbc组件用于接收业务数据的入口;若调用所述事务管理器通过所述拦截器拦截所述注解接收到的一个业务数据。3.根据权利要求1所述的数据事务处理方法,其特征在于,所述调用所述spring jdbc组件中的事务管理器根据预置的代理数据库对所述业务数据进行业务处理得到代理事务信息,包括:调用所述事务管理器根据所述代理数据库构建代理连接,所述代理连接是与所述代理数据库之间的通信连接;调用所述事务管理器根据预置的业务运算规则对所述业务数据进行业务处理,得到代理事务信息。4.根据权利要求1所述的数据事务处理方法,其特征在于,所述调用预置的mybatis组件根据所述业务数据得到数据库名,包括:调用所述mybatis组件中的映射接口提取所述业务数据中的业务要素;根据预置的分库分表规则对所述业务要素进行计算,得到所述业务数据的数据库名;或对所述业务要素进行哈希运算得到哈希摘要,并根据预置的计算规则对所述哈希摘要进行计算,得到所述业务数据的数据库名。5.根据权利要求1所述的数据事务处理方法,其特征在于,所述调用所述mybatis组件创建与所述真实数据库之间的真实连接,包括:若确定所述spring jdbc组件生成代理事务信息,则调用所述mybatis组件中的事务工厂生成真实事务,所述真实事务用于对所述真实数据库进行事务提交、或事务关闭、或事务回滚;调用所述mybatis组件中的事务工厂根据所述真实事务创建真实连接,所述真实连接是与所述真实数据库之间的通信连接。6.根据权利要求5所述的数据事务处理方法,其特征在于,调用所述mybatis组件中的
事务工厂生成真实事务,包括:所述事务工厂若确定所述代理事务信息的类型为提交类型,则根据所述提交类型生成事务提交的真实事务;所述事务工厂若确定所述代理事务信息的类型为关闭类型,则根据所述提交类型生成事务关闭的真实事务;所述事务工厂若确定所述代理事务信息的类型为回滚类型,则根据所述提交类型生成事务回滚的真实事务。7.根据权利要求5所述的数据事务处理方法,其特征在于,所述调用所述mybatis组件中的事务工厂根据所述真实事务创建真实连接,包括:所述事务工厂提取所述真实事务中的数据库名,并与所述数据库名对应的真实数据库之间构建连接线路,或将连接线路切换至所述真实数据库;将所述真实事务载入所述连接线路得到真实连接,所述真实连接用于对所述真实数据库执行所述真实事务。8.根据权利要求1-7中任一项所述的数据事务处理方法,其特征在于,将所述代理连接中的代理事务信息输出至所述真实连接,包括:获取与所述真实连接对应的真实数据库的数据库名,并获取与所述数据库名关联的代理连接;从所述代理连接中提取代理事务信息,并将提取到的代理事务信息载入所述真实连接。9.根据权利要求1-7中任一项所述的数据事务处理方法,其特征在于,所述执行具有所述代理事务信息的真实连接,包括:调用所述spring jdbc组件,通过所述真实连接访问所述真实数据库;调用所述spring jdbc组件根据所述代理事务信息,对所述真实数据库中与所述代理事务信息对应的数据进行数据处理。10.根据权利要求1-7中任一所述的数据事务处理方法,其特征在于,所述调用spring jdbc组件拦截一个业务数据之前,所述方法还包括:启动spring jdbc组件的spring容器,将所述代理数据库输入到所述spring容器的配置文件;在所述配置文件中的代理数据库上配置bean标签,以在所述spring jdbc组件的事务管理器中进行bean定义。11.一种基于spring jdbc的数据事务处理装置,其特征在于,与具有至少一个数据库的数据集群连接,所述装置包括:输入拦截模块,用于调用spring jdbc组件拦截一个业务数据;事务生成模块,用于调用所述spring jdbc组件中的事务管理器根据预置的代理数据库对所述业务数据进行业务处理得到代理事务信息,并将所述代理事务信息载入预置的代理连接中,其中,所述代理事务信息是定义了在数据库中对业务数据进行数据处理的事务上下文,所述数据处理包括:新增处理、和/或删除处理、和/或修改处理、和/或查询处理;真实识别模块,用于调用预置的mybatis组件根据所述业务数据得到数据库名,并将所述数据集群中与所述数据库名对应的数据库设为真实数据库,及将具有所述代理事务信息
的代理连接与所述数据库名关联;连接构建模块,用于调用所述mybatis组件创建与所述真实数据库之间的真实连接;事务处理模块,用于将所述代理连接中的代理事务信息输出至所述真实连接,并执行具有所述代理事务信息的真实连接,以根据所述代理事务信息对所述真实数据库中的数据进行数据处理。12.一种计算机设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;所述存储器存储计算机执行指令;所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1至10任一项所述的方法。13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至10任一项所述的方法。

技术总结
本申请提供一种数据事务处理方法、装置、计算机设备及存储介质,可适用于大数据技术领域,包括:拦截一个业务数据;根据预置的代理数据库对业务数据进行业务处理得到代理事务信息,并将代理事务信息载入预置的代理连接中;根据业务数据得到数据库名,并将数据集群中与数据库名对应的数据库设为真实数据库,及将具有代理事务信息的代理连接与数据库名关联;创建与真实数据库之间的真实连接;将代理连接中的代理事务信息输出至真实连接,并执行具有代理事务信息的真实连接。本申请避免了进行业务处理时需要与所有数据库连接的情况发生,进而避免了无效占用过多的数据库连接的情况发生。避免了无效占用过多的数据库连接的情况发生。避免了无效占用过多的数据库连接的情况发生。


技术研发人员:杨林 杨涛 王丹 李小平 杨硕 朱伟 张煌辉 李艳静 薛欣妹 秦璐琪
受保护的技术使用者:中国银行股份有限公司
技术研发日:2023.05.30
技术公布日:2023/8/28
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐