【问题标题】:hibernate.connection.provider_disables_autocommit not workinghibernate.connection.provider_disables_autocommit 不工作
【发布时间】:2018-08-21 16:12:16
【问题描述】:

我正在使用 TransactionInterceptor 打开事务,并使用 HibernateTransactionManager 和 com.zaxxer.hikari.HikariDataSource 作为数据源。

我已经为数据源和休眠属性 hibernate.connection.provider_disables_autocommit 设置了自动提交值,如下所示

<property name="autoCommit" value="false"/>

<prop key="hibernate.connection.provider_disables_autocommit">true</prop>

即使这样,交易也早在需要之前就已经打开了。

5.3.1.最终版本的hibernate-core用于上述。

我使用了以下参考资料。

https://github.com/spring-projects/spring-boot/issues/9261

https://vladmihalcea.com/why-you-should-always-use-hibernate-connection-provider_disables_autocommit-for-resource-local-jpa-transactions/

如果需要做任何其他事情或者延迟的确切含义是什么,请告诉我。

提前致谢。

【问题讨论】:

  • 自动提交与启动事务无关。这与休眠有关,再次禁用自动提交(Spring 已经完成)。设置只读是一项耗时的操作(在某些数据库上),因此这样做两次会产生影响。但这与 tx 的开始点无关。
  • @M.Deinum 显然,在 Hibernate 中,这与 tx 的启动点有关。在帖子所有者链接的帖子中以及hibernate.atlassian.net/browse/HHH-11542 链接的帖子中描述了这种“要做的事情”。但可以肯定的是,这只是 Hibernate 特定的关系。
  • 该问题描述了我所说的它不会延迟事务或获取连接。它只是禁用再次设置属性。
  • vladmihalcea.com/… 似乎确实暗示它会延迟连接获取。我必须说我不明白文章中的逻辑以及为什么他们只有在知道自动提交已被连接池禁用时才能延迟。

标签: java spring hibernate autocommit disable


【解决方案1】:

除了在休眠中将自动提交设置为 false,您还需要在连接池级别设置自动提交为 false。否则它不会像你的情况那样有效。比如说,对于 hikari 池,您需要进行如下配置:

HikariConfig hikariConfig = super.hikariConfig(dataSource);

hikariConfig.setAutoCommit(false);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2018-12-22
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多