JdbcBatchItemWriterBuilder 与 org.springframework.jdbc.core.jdbcTemplate.batchUpdate

JdbcBatchItemWriterBuilder vs org.springframework.jdbc.core.jdbcTemplate.batchUpdate

我了解jdbcTemplate.batchUpdate用于在一次通信中将多条记录发送到数据库。 假设我有 1000 条记录要更新,而不是从应用程序到数据库的 1000 次通信,应用程序将在请求中发送 1000 条记录。

JdbcBatchItemWriterBuilder 是作业中任务的组合。

我的问题是,如果要通过JdbcBatchItemWriterBuilder 处理1000 条记录(INSERT 语句),是否一次性执行所有INSERT?还是一个接一个?

如果一个接一个,使用 JdbcBatchItemWriterBuilder 连接数据库 1000 次会导致性能问题?怎么处理的?

我想了解 Spring 批处理是否比 运行 1000 个使用 jdbcTemplate.update INSERT staments 更好?

JdbcBatchItemWriter 在内部使用 java.sql.PreparedStatement#addBatchjava.sql.Statement#executeBatch(参见 https://github.com/spring-projects/spring-batch/blob/c4010fbffa6b71cbcfe79d523023251ce73666a4/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcBatchItemWriter.java#L189-L195),因此块的所有项目都会有一个批量插入。

此外,这将在单个事务中执行,如参考文档的 Chunk-oriented Processing 部分所述。