Spring批处理中的网格大小

我有批处理作业,它从批量文件中读取数据,处理它并插入数据库。

我使用默认分区处理程序使用spring的分区function。

     

这里gridSize什么意义? 我已经以这样的方式配置它等于taskExecutor中的并发性。

gridSize指定要创建的(通常)相同数量的workers程序要处理的data blocks的数量。 将其视为map / reduce中的多个映射数据块。

使用StepExecutionSplitter ,给定数据, PartitionHandler “分区”/将数据拆分为gridSize部分,并将每个部分发送到您的案例中的独立worker => thread

例如,DB中有10行需要处理。 如果将gridSize设置为5 ,并且使用简单的分区逻辑,则每个线程最终会有gridSize = 2行=> 5个线程,每个线程同时工作2行。

根据API,

传递给句柄中的StepExecutionSplitter(StepExecutionSplitter,StepExecution)方法,指示理想情况下需要多少个StepExecution实例。 由于必须保留输入数据分区,因此允许StepExecutionSplitter在重新启动时忽略网格大小。

网格大小只是一组任务(假设为一袋袋),一个分区步骤将提升进行处理。 完成所有任务(袋装袋)后,它将返回下一组任务(袋装袋)。