HikariCP如何处理不完整的JDBC事务?

Ham*_*ari 18 java transactions connection-pooling jdbc hikaricp

昨天我偶然遇到了HikariCP,整整一夜都在研究它.我对用于微调其实现和设计的细节和努力给我留下了深刻的印象.直截了当地说,我无法确定它是如何实际处理通过其autoCommit设置检查回池中的连接false,而由于例外,它们既没有commit()也没有rollback()在它们上发布.这可能是下一个期望新连接的请求者的许多严重事务问题的根源,但遗憾的是它以其悬空事务状态接收此连接.

虽然C3P0和Tomcat的JDBC池有一些所谓的旋钮用于此目的(通过配置或拦截),但我在HikariCP的文档或支持组中找不到任何内容.如果我错了,请纠正我,但写一个简单的单元测试告诉我,游泳池对此没有任何意义.

我需要知道这个观察是否真的是正确的,我不会错过任何关于它的事情.此外,如果有任何计划在HikariCP中解决这个问题,因为它对我来说至关重要.

谢谢.

bre*_*ttw 24

我是HikariCP的作者之一.如果关闭自动提交,HikariCP不会自动执行提交或回滚.通常期望明确关闭自动提交的应用程序准备好正确处理这些(在finally块中推荐) - 如本例中的官方JDBC文档.

如果在自动提交设置为false的情况下将连接返回到池,我们愿意向HikariCP添加自动"回滚"行为(但不是自动"提交").如果您希望这种行为,请打开功能请求.

更新:HikariCP 1.2.2及更高版本对自动提交设置为"false"的已关闭连接执行自动"回滚".此外,它会将事务隔离级别重置为配置的默认值,并且如下面的注释中所述,当然会关闭打开的语句等.

更新:HikariCP 2.3.x及更高版本现在还在自动提交设置为时跟踪事务状态false,并且如果事务状态是干净的,则将绕过自动回滚操作.