Spring批处理读取器的“pageSize”属性和写入器的“提交间隔”之间有什么关系/区别。
我可能错了,但我在我的应用程序中看到了一种模式,即每超过一个页面大小,我就会看到一个提交。这是真的吗?
谢谢
提交间隔决定一个块中要处理的项目数。
页面大小决定了每次需要时将获取多少项。
根据你设定的数字,行为可能是你描述的。它们用于优化。
commit interval
定义了在一个块中处理多少项。在单个事务的范围内读取、处理、然后写入的项目数(无法承受跳过/重试语义)。
分页ItemReader
实现(例如JdbcPagingItemReader
)上的page-size
属性定义了每次读取底层资源时获取多少条记录。因此,在JDBC示例中,它是对DB的一次点击请求的记录数。
虽然这两个属性之间没有直接的相关性,但通常认为让它们匹配是一个好主意,但是它们独立地提供了两个旋钮,您可以使用它们来修改应用程序的性能。
关于您的直接问题,如果您将页面大小
设置为与提交间隔
相同,那么是的,我希望每个页面都有一个提交。
我有一个非常简单的spring批处理,它从一个表中更新了一百万条记录。因为它非常简单,所以我尝试只实现一个更新表的Tasklet。 但我想用10个记录的步骤来promise。是可以在tasklet中实现这一点,还是我必须将itemReader/ItemWriter与块一起使用? 提前谢谢。
1)读取器读取的任何记录都应通过处理器的处理传递给写入器 2)我的阅读器通过SQL查询读取记录,所以如果阅读器读取了100条记录,那么所有记录都应该一次传递给writer 3)如果读取1000条记录,则应同时通过所有1000条记录 4)所以从本质上说,提交间隔在这里是动态的,而不是固定的。 5)我们有什么办法可以做到这一点吗? 编辑: 现在我们想要的是动态提交间隔。读者正在阅读的任何内容,都将立即
如何使用Java配置实现这一点?
此场景的解决方案-提交间隔为10,跳过限制为10,总输入记录为20,前9个记录有效,其余无效。 当已读取9条记录时,第10条无效。块大小是10,跳过限制是10,那么Spring批处理会在输出文件中写入那9条记录吗?如果不是,则继续读取剩余的记录,当读取第20条记录时,错误记录的计数为11,定义的跳过限制为10。因此该过程将立即停止。首先读取的有效记录的命运如何。 前9条记录是否写入输出文件。 请让
使用基于Spring Batch xml的配置,您可以参数化提交间隔/块大小,如下所示: 使用基于javaconfig的配置,它看起来像 但这也行不通,我也明白 原因:org.SpringFramework.Expression.Spel.SpelEvaluationException:EL1008E:(pos 0):在“org.SpringFramework.Beans.Factory.Conf
我正面临着Spring批处理的问题。我们在作业中使用了一个任务执行器(simpleAsyncTaskExecutor),它处理两个并行步骤的流程。 谢谢你。 下面是我的工作的配置(不包括我们的自定义编写器):