微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 连接上活动事务的行为关闭?

如果调用close方法并且存在活动事务,那么活动事务会发生什么?他们会被提交还是回滚?

解决方法:

添加到另一个答案,我测试了Oracle和sql Server上的行为,我正在使用的数据库.

MSsql回滚事务.这是你直觉所期望的.

另一方面,Oracle提交交易.这在他们的JDBC Guide中有记录:

如果禁用了自动提交模式,并且在未显式提交或回滚上次更改的情况下关闭连接,则会运行隐式COMMIT操作.

当然,JDBC规范为您提供了自由选择,但我个人认为隐含地提交事务是一个糟糕的设计选择.作为一个参数,考虑一个线程的用例,该线程忙于处理长事务并且不响应关闭请求.当应用程序最终关闭连接池时,这将依次关闭连接,提交未完成的事务!

这个故事的寓意是连接池实现必须始终在手动提交模式下关闭连接之前调用rollback().但是,在实现连接池时,这不是我想到的.例如,见PooledConnectionImpl from DBCP

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐