数据库事务兼容方法及装置制造方法及图纸

技术编号:38316873 阅读:12 留言:0更新日期:2023-07-29 08:59
本发明专利技术实施例公开了一种数据库事务兼容方法及装置,可用于金融领域或其他技术领域,该方法包括:在应用启动时,配置第一事务框架使用由第二事务框架管理的事务工厂;在创建事务时,调用所述第二事务框架的获取事务方法来创建数据库连接,并将创建的数据库连接缓存在当前线程变量中,若当前线程变量中已存在数据库连接,则继续使用当前线程变量中的数据库连接;调用所述第一事务框架操作数据库,所述第一事务框架操作数据库时会从所述目标事务管理器中获取数据库连接;调用所述第二事务框架的注解操作数据库。本发明专利技术使得Spring事务与mybatis事务嵌套调用的时候,使用的是同一个事务,解决了事务不一致的问题。解决了事务不一致的问题。解决了事务不一致的问题。

【技术实现步骤摘要】
数据库事务兼容方法及装置


[0001]本专利技术涉及分布式批量数据库事务处理领域,具体而言,涉及一种数据库事务兼容方法及装置。

技术介绍

[0002]目前分布式批量应用系统主要采用两种数据库事务开发框架,一种是开源的Spring事务框架,由Spring控制事务提交和事务回滚。例如如下伪代码:
[0003]@Transactional
[0004]Public测试Spring事务{
[0005]执行Spring数据库操作();
[0006]}
[0007]Spring框架使用aop切面技术实现事务管理,应用在需要使用数据库事务的类或方法上添加注解@Transactional,Spring框架即会在被注解的方法开始前创建事务,从数据库连接池中获取数据库连接,并缓存于ThreadLocal线程变量中,后续同一个线程的@Transactional切面,在使用数据库连接时,会从ThreadLocal线程变量中获取,这样就可以共用同一个数据库连接,达到同一个事务的目的。如果被注解的方法正常结束,Spring框架会提交事务,如果被注解的方法抛出异常,Spring框架会回滚事务,最后,Spring框架会清理线程变量中的数据库连接,将其归还回数据库连接池。流程图如图5所示。
[0008]另外一种是使用mybatis事务框架,其配置的事务管理器为JdbcTransaction,该事务管理器是直接从数据库连接池获取连接的,应用自己控制事务提交和事务回滚。例如如下伪代码:
[0009]Public测试mybatis事务{
[0010]从会话工厂获取数据库访问会话并创建事务();
[0011]在会话中执行数据库操作();
[0012]在会话中提交或回滚事务();
[0013]在会话中关闭事务();
[0014]}
[0015]使用mybatis的事务管理,创建事务、提交事务、回滚事务、关闭事务则全部由应用负责。流程图如图6。
[0016]目前应用间存在公共模块调用的问题,假如A应用提供的公共模块是使用Spring事务框架实现的,B应用使用的是mybatis事务框架,B应用引用A应用的公共模块就会造成事务不一致,例如:
[0017]Public测试混合事务{
[0018]从mybatis会话工厂获取数据库访问会话并创建事务();
[0019]在mybatis会话中执行数据库操作();
[0020]执行Spring数据库操作();
[0021]在mybatis会话中提交或回滚事务();
[0022]在mybatis会话中关闭事务();
[0023]}
[0024]由于Spring事务与mybatis事务是分别从数据库连接池中获取两个不同的数据库连接,因此Spring的事务与mybatis的事务为两个不同的事务,导致“执行Spring数据库操作”执行完后,Spring事务就结束了,其操作的数据已经提交到数据库中,而此时“在mybatis会话中提交或回滚事务”还没执行,“在mybatis会话中执行数据库操作”语句所操作的数据还没提交到数据库,这样就造成了事务不一致。由此可见,如何兼容Spring事务框架与mybatis事务框架,使得Spring事务与mybatis事务嵌套调用的时候,使用的是同一个事务,解决事务不一致的问题是现有技术急需解决的问题。
[0025]本部分旨在为权利要求书中陈述的本专利技术实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

技术实现思路

[0026]本专利技术为了解决上述
技术介绍
中的至少一个技术问题,提出了一种数据库事务兼容方法及装置。
[0027]为了实现上述目的,根据本专利技术的一个方面,提供了一种数据库事务兼容方法,该方法包括:
[0028]在应用启动时,配置第一事务框架使用由第二事务框架管理的事务工厂,使得所述第一事务框架使用的事务管理器为目标事务管理器,其中,所述第一事务框架包括:mybatis事务框架,所述第二事务框架包括:Spring事务框架,所述目标事务管理器包括:SpringManagedTransaction;
[0029]在创建事务时,调用所述第二事务框架的获取事务方法来创建数据库连接,并将创建的数据库连接缓存在当前线程变量中,若当前线程变量中已存在数据库连接,则继续使用当前线程变量中的数据库连接;
[0030]调用所述第一事务框架的打开数据库会话方法来创建事务管理器,其中,创建的事务管理器为所述目标事务管理器;
[0031]调用所述第一事务框架操作数据库,所述第一事务框架操作数据库时会从所述目标事务管理器中获取数据库连接,所述目标事务管理器的逻辑为,先尝试从当前线程变量中获取数据库连接,若当前线程变量中没有再从连接池中获取;
[0032]调用所述第二事务框架的@Transactional注解操作数据库,通过@Transactional注解操作数据库时会从当前线程变量中获取数据库连接
[0033]为了实现上述目的,根据本专利技术的另一方面,提供了一种数据库事务兼容装置,该装置包括:
[0034]配置单元,用于在应用启动时,配置第一事务框架使用由第二事务框架管理的事务工厂,使得所述第一事务框架使用的事务管理器为目标事务管理器,其中,所述第一事务框架包括:mybatis事务框架,所述第二事务框架包括:Spring事务框架,所述目标事务管理器包括:SpringManagedTransaction;
[0035]数据库连接创建单元,用于在创建事务时,调用所述第二事务框架的获取事务方
法来创建数据库连接,并将创建的数据库连接缓存在当前线程变量中,若当前线程变量中已存在数据库连接,则继续使用当前线程变量中的数据库连接;
[0036]事务管理器创建单元,用于调用所述第一事务框架的打开数据库会话方法来创建事务管理器,其中,创建的事务管理器为所述目标事务管理器;
[0037]第一数据库操作单元,用于调用所述第一事务框架操作数据库,所述第一事务框架操作数据库时会从所述目标事务管理器中获取数据库连接,所述目标事务管理器的逻辑为,先尝试从当前线程变量中获取数据库连接,若当前线程变量中没有再从连接池中获取;
[0038]第二数据库操作单元,用于调用所述第二事务框架的@Transactional注解操作数据库,通过@Transactional注解操作数据库时会从当前线程变量中获取数据库连接。
[0039]为了实现上述目的,根据本专利技术的另一方面,还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述数据库事务兼容方法的步骤。
[0040]为了实现上述目的,根据本专利技术的另一方面,还提供了一种计算机可读存储介质,其上存储有计算机程序/指令,该计算机程序/指令被处理器执行时实现上本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种数据库事务兼容方法,其特征在于,包括:在应用启动时,配置第一事务框架使用由第二事务框架管理的事务工厂,使得所述第一事务框架使用的事务管理器为目标事务管理器,其中,所述第一事务框架包括:mybatis事务框架,所述第二事务框架包括:Spring事务框架,所述目标事务管理器包括:SpringManagedTransaction;在创建事务时,调用所述第二事务框架的获取事务方法来创建数据库连接,并将创建的数据库连接缓存在当前线程变量中,若当前线程变量中已存在数据库连接,则继续使用当前线程变量中的数据库连接;调用所述第一事务框架的打开数据库会话方法来创建事务管理器,其中,创建的事务管理器为所述目标事务管理器;调用所述第一事务框架操作数据库,所述第一事务框架操作数据库时会从所述目标事务管理器中获取数据库连接,所述目标事务管理器的逻辑为,先尝试从当前线程变量中获取数据库连接,若当前线程变量中没有再从连接池中获取;调用所述第二事务框架的@Transactional注解操作数据库,通过@Transactional注解操作数据库时会从当前线程变量中获取数据库连接。2.根据权利要求1所述的数据库事务兼容方法,其特征在于,还包括:在提交事务时,从数据库会话中获取数据库连接,再对数据库连接进行提交,其中,数据库会话为从所述第一事务框架或者从所述第二事务框架获取;设置回滚标志为第一标志,所述第一标志用于表示未进行回滚。3.根据权利要求1所述的数据库事务兼容方法,其特征在于,还包括:在回滚事务时,从数据库会话中获取数据库连接,再对数据库连接进行回滚,其中,数据库会话为从所述第一事务框架或者从所述第二事务框架获取;设置回滚标志为第二标志,所述第二标志用于表示进行了回滚。4.根据权利要求1所述的数据库事务兼容方法,其特征在于,还包括:在关闭事务时,调用数据库会话的关闭方法删除所述目标事务管理器;若回滚标志为第一标志,调用所述第二事务框架的提交事务方法清理缓存在线程变量中的数据库连接,并将该清理的数据库连接返回到数据库连接池中,所述第一标志用于表示未进行回滚;若回滚标志为第二标志,调用所述第二事务框架的回滚事务方法清理缓存在线程变量中的数据库连接,并将该清理的数据库连接返回到数据库连接池中,所述第二标志用于表示进行了回滚。5.根据权利要求1所述的数据库事务兼容方法,其特征在于,所述调用所述第二事务框架的获取事务方法来创建数据库连接,具体包括:调用所述第二事务框架的PlatformTransacti...

【专利技术属性】
技术研发人员:何启承李佳徐张尧郑思慧
申请(专利权)人:中国工商银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1