首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尽管HikariCP = isAutoCommit = false,但仍进行提交

尽管HikariCP = isAutoCommit = false,但仍进行提交
EN

Stack Overflow用户
提问于 2020-10-23 15:29:05
回答 1查看 118关注 0票数 0

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

代码语言:javascript
复制
    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会话中,但不会被提交。但是,当我的单元测试成功通过时,我看到我的合成数据是用DB实现的。当HikariCP关闭时,我认识到提交占据了一个位置:

代码语言:javascript
复制
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)

如何才能完全避免在DB中提交?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-10-24 01:02:21

那替换一下

config.isAutoCommit =假//!

通过

Config.SetAutoCommit(假)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64502965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档