我在处理Groovy的Sql处理批处理语句时遇到问题。当执行batch语句时,代码会无限期地挂起,而不会出现错误。
下面是我正在运行的代码的示例:
String query = '''
INSERT INTO my_table
(field1, field2, field3, field4, field5, field6, field7, field8)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
'''
Sql sql = Sql.newInstance("jdbc:mariadb://${config.serverName}:${config.port}/${config.databaseName}", config.username, config.password))
List<MyRow> rows = [ ... ] // A collection of 21 objects
sql.withTransaction {
sql.withBatch(query) { BatchingPreparedStatementWrapper statement ->
rows.each {
statement.addBatch(it.field1, it.field2, it.field3, it.field4, it.field5, it.field6, it.field7, it.field8)
}
}
}
使上面的代码起作用的唯一方法是将批处理大小指定为1。
我的项目具有以下依赖关系:
有什么想法吗?
更新:
我最近发现在连接字符串中添加rewriteBatchedStatements=true
可以解决我的问题。
请参见https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html
不过,我不确定这是否是正确的解决方法。