Proxool+hibernate+spring时事务自动回滚导致无法提交的问题解决

这个问题整了我几乎一个下午的时间。。。。。

 

项目需要用到双数据源,而对于连接池,我选择了备受好评的Proxool,结果在spring配置了两个数据源,测试事务的时候,发现不发生错误,数据也无法提交出去。。。。。这让我纳闷了很久很久。。。一直以为是我双数据源配置错了,因为在SSH+proxool的情况下配置双数据源真的是第一次尝试。。。。。

 

后来逐步测试,直到把双数据源配置去了也发现不能插入,于是开始怀疑是数据库的问题。。。结果不是,后来在想,难道proxool的配置被我改烂了?想想也不至于那么差劲吧~~

 

然后重新恢复原始配置,发现proxool的数据源无法插入数据,但是能查询,换成jdbc则都可以,看来这是proxool的问题了。。。找到根源所在,立马对症下药。。。。但是网上也找不到很满意的答案,或者就是不了了之的,而且有这种问题的还真的都是使用proxool数据源的。。。。看来proxool本身存在很多问题啊。。。

 

再测试看看为什么proxool的数据出问题,在proxool和jdbc来回切换间,发现自增长主键的值并不连续的,开始怀疑proxool并不是没有提交查询,而是自动回滚了。。。。,打开SQL事件探测器追踪。。。

果然自动回滚了。。。。。

如下:

SET IMPLICIT_TRANSACTIONS ON
go
declare @P1 int
set @P1=1
exec sp_prepare @P1 output, N'@P0 nvarchar(4000),@P1 nvarchar(4000)', N'insert into testdatabase.dbo.users (name, deptcode) values ( @P0 ,  @P1 ) SELECT SCOPE_IDENTITY() AS ID', 1
select @P1
go
exec sp_execute 1, N'kk', NULL
go
IF @@TRANCOUNT > 0 ROLLBACK TRAN
go
IF @@TRANCOUNT > 0 COMMIT TRAN
SET IMPLICIT_TRANSACTIONS OFF
go

 

这个真是郁闷。。。。proxool这种问题也有阿,有查了下相关的资料,发现很少有人遇到这个问题,只有一个人也说发现了这样的问题,只要使用hibernate加载proxool配置文件就会这样。。。我是使用spring来控制hibernate参数,参数中配置了hibernate加载proxool文件的。。。。。。

 

于是使用了hibernate的参数hibernate.connection.autocommit,设为了true

再测试。。问题居然解决。。。。。至此告一段落。。。虽然proxool的口碑不错,但是配置至今,我发现这家伙的bug还是非常多阿。。。。至今为止已经遇到不少了,而且很多是众所周知的。。。而今天这个也算是一个大bug之一了。。。。

 

写出来也是为了方便遇到相同问题的朋友多一个解决方案,因为我在网上实在没有找到真正能够解决这个问题的方法。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值