在集成测试中,我想向应用程序中的每个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会话中,但不会被提交。但是,当我的单元测试成功通过时,我看到我的综合数据已在DB中提交。我意识到当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)
如何完全避免在数据库中提交?谢谢!
答案 0 :(得分:0)
关于替换
config.isAutoCommit = false //!
作者
config.SetAutoCommit(false)