`
buludan
  • 浏览: 19155 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

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之一了。。。。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics