У меня проблема с обработкой пакетных операторов Groovy Sql.Когда выполняется пакетный оператор, код зависает бесконечно без ошибок.
Ниже приведен пример кода, который я запускаю:
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.
Мой проект имеет следующие зависимости:
- org.codehaus.groovy: groovy-all: 2.4.12
- org.mariadb.jdbc: mariadb-java-client: 2.2.3
- Amazon Aurora MySQL
Есть идеи?
Обновление:
Я недавно обнаружил, что добавление rewriteBatchedStatements=true
в строку подключения решает мою проблему.
См. https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html
Я не уверен, что это правильноисправить, хотя.