提问人:robber 提问时间:9/27/2023 更新时间:9/27/2023 访问量:67
jdbcTemplate BatchUpdate 逐行发送,而不是更大的批处理
jdbcTemplate BatchUpdate sending row by row instead of bigger batch
问:
Spring JdbcTemplate 正在发送 1-3 的小批量大小。我想要 10,000 个批量大小。我用于调用 batchUpdate 的代码如下,以及我在 AWS 的 postgres 数据库上看到的日志。
我在jdbc连接上将rewriteBatchedStatements设置为true。我还尝试将我的函数重写为最后一个代码空间中的代码。
我的目标是在数据库中插入 10,000 条记录,如下所示。
INSERT INTO table_name (column_list)
VALUES
(value_list_1),
(value_list_2),
...
(value_list_n);
public void insertTest(UUID var1, int var2, List<Shape> Tests)
{
jdbcTemplate.batchUpdate(
"INSERT INTO database.table VALUES (?, ?, ?, ?, ?, ?, ?)",
Tests,
10000,
(ps, entity) ->
{
ps.setObject(1, var1);
ps.setLong(2, var2);
ps.setObject(3, entity.getVar3());
ps.setObject(4, entity.getVar4());
ps.setObject(5, entity.getVar5());
ps.setObject(6, entity.getVar6());
ps.setObject(7, entity.getVar7());
});
}
2023-09-26T12:47:13.000+13:00 2023-09-25 23:47:13 UTC:10.20.0.125(28120):database:[4882]:LOG: duration: 0.003 ms bind S_1: INSERT INTO database.table VALUES ($1, $2, $3, $4, $5, $6)
2023-09-26T12:47:13.000+13:00 2023-09-25 23:47:13 UTC:10.20.0.125(28120):database:[4882]:DETAIL: parameters: $1 = 'data', $2 = '1', $3 = 'data', $4 = '1', $5 = 'data', $6 = 'data'
2023-09-26T12:47:13.000+13:00 2023-09-25 23:47:13 UTC:10.20.0.125(28120):database:[4882]:LOG: execute S_1: INSERT INTO database.table VALUES ($1, $2, $3, $4, $5, $6)
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
public int[] batchInsert(List<Book> books) {
return this.jdbcTemplate.batchUpdate(
"insert into books (name, price) values(?,?)",
new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, books.get(i).getName());
ps.setBigDecimal(2, books.get(i).getPrice());
}
public int getBatchSize() {
return books.size();
}
});
}
从此链接: https://mkyong.com/spring/spring-jdbctemplate-batchupdate-example/
谢谢
答: 暂无答案
评论
rewriteBatchedStatements