【问题标题】:HikariCP makes commit despite isAutoCommit = false尽管 isAutoCommit = false,HikariCP 仍进行提交
【发布时间】:2021-02-06 16:38:49
【问题描述】:

在集成测试中,我想在我的应用程序中的每个 SQL 中添加一些合成数据(因为表不包含可预测的数据)。为了达到它,我在 HikariConfig 的 connectionInitSql 字符串中放入了一些 INSERT DML 并设置 isAutoCommit = false 以避免污染我的数据库

    private fun getDataSource(name: String): DataSource {
      val poolConfig = dsconfig.getValue(name)
      val config = HikariConfig()
      config.jdbcUrl = poolConfig.jdbcUrl
      config.username = poolConfig.username
      config.password = poolConfig.password
      config.connectionTimeout = poolConfig.connectionTimeout
      config.maxLifetime = poolConfig.maxLifetime
      config.maximumPoolSize = poolConfig.maximumPoolSize
      config.isAutoCommit = false //!
      config.connectionInitSql = getConnectionInitSql()
      config.transactionIsolation = "TRANSACTION_SERIALIZABLE"
      return HikariDataSource(config)
   }

   private fun getConnectionInitSql(): String{
    var sqlStatementBuilder = StringBuilder()
    sqlStatementBuilder.append("begin\n")
    sqlStatementBuilder.append("execute immediate 'insert into hikari_test values (1)';\n")
    sqlStatementBuilder.append("end;")
    return sqlStatementBuilder.toString()
   }

我希望我的合成数据将存在于每个 Oracle 会话中,但不会被提交。但是,当我的单元测试成功通过时,我看到我的合成数据已提交到数据库中。我认识到当 HikariCP 关闭时提交会发生:

2020-10-23T18:05:50.154+0300 [DEBUG] [TestEventLogger] Gradle Test Executor 33 PASSED
2020-10-23T18:05:50.163+0300 [QUIET] [system.out] [] INFO    2020-10-23 18:05:50.166 [SpringContextShutdownHook] com.zaxxer.hikari.HikariDataSource: HikariPool-1 - Shutdown initiated...
2020-10-23T18:05:50.371+0300 [QUIET] [system.out] [] INFO    2020-10-23 18:05:50.383 [SpringContextShutdownHook] com.zaxxer.hikari.HikariDataSource: HikariPool-1 - Shutdown completed.
2020-10-23T18:05:50.639+0300 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: SUCCEEDED
2020-10-23T18:05:50.639+0300 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'Gradle Test Executor 33' finished with exit value 0 (state: SUCCEEDED)

我怎样才能完全避免在数据库中提交?谢谢!

【问题讨论】:

    标签: oracle connection-pooling spring-transactions hikaricp


    【解决方案1】:

    怎么换

    config.isAutoCommit = false //!

    通过

    config.SetAutoCommit(false)

    【讨论】:

    • 在 Kotin 中,这些是相同的
    • 您是否尝试过通过 spring.datasource.hikari.auto-commit 设置自动提交
    • 是的。没有效果。
    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2017-01-04
    相关资源
    最近更新 更多