gpt4 book ai didi

java - 在面向读写 block 的过程中,Spring Batch 在哪里提交?

转载 作者:行者123 更新时间:2023-11-30 06:04:26 25 4
gpt4 key购买 nike

在我的java项目中,我正在使用Spring boot进行读取(FlatFileItemReader)-写入(JdbcBatchItemWriter)面向 block 的过程。使用 HikariCp 数据源。

查看 Spring Batch jdbc writer,我们可以找到该部分:

               //some code
@Override
public int[] doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException {
for (T item : items) {
itemPreparedStatementSetter.setValues(item, ps);
ps.addBatch();
}
return ps.executeBatch();
}
//some code

所以基本上,如果我的 Hikari 数据源将 setAutocommit 参数设置为 true,则意味着在 ps.executeBatch() 之后我的数据库将被更新.

这里的第一个问题,关于PreparedStatement.executeBatch() 它到底是如何处理的?它会提交每个sql语句还是在每个sql语句的末尾提交?

如果setAutocommit参数设置为false,则在ps.executeBatch()之后不应更新它。

由于 Spring 批处理应该管理事务以及提交。我试图找出它在哪里有助于更好地理解我所遇到的问题。查看 ChunkOrientedTaskletSimpleChunkProcessorTransactionTemplate 我找不到它在进程中的何处进行提交。

所以我的第二个问题是,Spring批处理在面向 block 的过程中到底在哪里提交?

编辑:使用 Spring Batch 3.0.7

编辑:它似乎在 AbstractPlatformTransactionManager.processCommit(DefaultTransactionStatus status) 中处理,但仍然无法理解如何处理。

最佳答案

你的自动提交参数是无关紧要的,Spring将管理事物并在它认为合适的时候覆盖它(并且它确实认为它合适)。

您可以set the commit interval定义您想要提交的频率。

是否应该更改它完全取决于您打算如何批处理、执行是否会失败、是否应该跳过或重试这些情况以及其他类似的事情。

关于java - 在面向读写 block 的过程中,Spring Batch 在哪里提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51648621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com