如果未明确提交/回滚事务,则HikariCP在连接上的行为会关闭吗?

时间:2019-06-25 10:26:22

标签: hikaricp

我正在从BoneCP迁移到HikariCP。在BoneCP中,有以下选项:

# If true, issue a reset (rollback) on connection close in case client forgot it.
resetConnectionOnClose=true

在没有显式提交/回滚事务的情况下关闭连接时,HikariCP在这种情况下的行为是什么?我找不到等效的配置选项。

谢谢你, 闷气

2 个答案:

答案 0 :(得分:1)

我在com.zaxxer.hikari.pool.ProxyConnection的代码源中找到了答案。在close()方法中,有以下代码:

if (this.isCommitStateDirty && !this.isAutoCommit) {
    this.delegate.rollback();
    this.lastAccess = ClockSource.currentTime();
    LOGGER.debug("{} - Executed rollback on connection {} due to dirty commit state on close().", this.poolEntry.getPoolName(), this.delegate);
}

因此,如果您没有启用autoCommit配置选项,并且没有显式提交/回滚,那么它将为您回滚。

答案 1 :(得分:0)

我没有检查,但基本上HikariPool调用了Connectionclose方法,所以这似乎取决于驱动程序的实现

  

强烈建议应用程序在调用close方法之前显式提交或回滚活动事务。如果调用close方法并且有活动事务,则结果是实现定义的。