HikariCP:SELECT 查询由于 close() 上的脏提交状态而执行回滚
HikariCP: SELECT queries execute roll back due to dirty commit state on close()
我正在尝试在遗留系统中使用 HikarCP。我将 autocommit 配置为 false,这正是我们想要的,并意识到我的日志中充满了
[c.z.h.p.ProxyConnection][ProxyConnection.java:232] ora - Executed rollback on connection net.sf.log4jdbc.ConnectionSpy@3f2bba67 due to dirty commit state on close().
当从池中获取的连接在发出查找器查询后关闭时会发生这种情况。在连接的生命周期内没有发生 insert/update/delete。 select 查询应该是这样的吗?我应该在每次 select 之后执行 COMMIT 吗?
是的,你应该承诺。甚至 SELECT 查询也会启动事务并获取锁。特别是对于各种隔离级别,甚至 TRANSACTION_READ_COMMITTED.
也取决于数据库
当自动提交为 false 时,HikariCP 将非显式提交视为应用程序错误。其他一些池支持配置 "commit-on-close",但 HikariCP 认为这是有风险的,并且是支持从未正确编写的应用程序的黑客攻击。
JDBC 规范没有明确说明没有自动提交的连接是应该自动提交还是回滚。这是驱动程序开发人员留下的实现细节。
我正在尝试在遗留系统中使用 HikarCP。我将 autocommit 配置为 false,这正是我们想要的,并意识到我的日志中充满了
[c.z.h.p.ProxyConnection][ProxyConnection.java:232] ora - Executed rollback on connection net.sf.log4jdbc.ConnectionSpy@3f2bba67 due to dirty commit state on close().
当从池中获取的连接在发出查找器查询后关闭时会发生这种情况。在连接的生命周期内没有发生 insert/update/delete。 select 查询应该是这样的吗?我应该在每次 select 之后执行 COMMIT 吗?
是的,你应该承诺。甚至 SELECT 查询也会启动事务并获取锁。特别是对于各种隔离级别,甚至 TRANSACTION_READ_COMMITTED.
也取决于数据库当自动提交为 false 时,HikariCP 将非显式提交视为应用程序错误。其他一些池支持配置 "commit-on-close",但 HikariCP 认为这是有风险的,并且是支持从未正确编写的应用程序的黑客攻击。
JDBC 规范没有明确说明没有自动提交的连接是应该自动提交还是回滚。这是驱动程序开发人员留下的实现细节。