Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring批处理中的网格大小_Java_Spring_Spring Batch - Fatal编程技术网

Java Spring批处理中的网格大小

Java Spring批处理中的网格大小,java,spring,spring-batch,Java,Spring,Spring Batch,我有一个批处理作业,它从大容量文件中读取数据,处理数据并插入数据库 我正在使用spring的分区特性,使用默认的分区处理程序 <bean class="org.spr...TaskExecutorPartitionHandler"> <property name="taskExecutor" ref="taskExecutor"/> <property name="step" ref="readFromFile" /&

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

我正在使用spring的分区特性,使用默认的分区处理程序

    <bean class="org.spr...TaskExecutorPartitionHandler">
          <property name="taskExecutor" ref="taskExecutor"/>
          <property name="step" ref="readFromFile" />
          <property name="gridSize" value="10" />
    </bean>

这里的
gridSize
的意义是什么?我的配置方式与taskExecutor中的并发性相同。

根据API

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


gridSize
指定要创建的
数据块的数量,以便(通常)由相同数量的
工作者处理。将其视为map/reduce中的许多映射数据块

使用
StepExecutionSplitter
,给定数据,
PartitionHandler
“partitions”/将数据拆分为
gridSize
部分,并将每个部分发送给独立的辅助线程=>
thread


例如,数据库中有10行需要处理。如果您将
gridSize
设置为5,并且您使用的是一个简单的分区逻辑,那么每个线程将有10/5=2行=>5个线程同时处理每行2行。

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

在这种情况下,gridSize必须是动态的(硬编码为10),它将在运行时根据拆分的数量进行配置,对吗?那么如何将分割信息的数量传递给TaskExecutorPartitionHandler呢?我指的是类似于或的东西。但是在开始作业之前没有确定拆分的数量。我不确定我是否理解您所说的
网格大小必须是动态的
。您可以在属性文件中定义它(
grid size=“${job.grid.size}”
),然后驱动通过该文件生成的线程数。拆分的数量实际上是由
gridSize
决定的。我的疑问是,在这种情况下,无论文件大小如何,拆分的数量都保持不变(因为拆分是由网格大小决定的,网格大小是恒定的)。理想情况下应该是这样吗?作为一个框架,Spring Batch不会估计处理文件所需的线程数量,因为这种知识可能取决于许多业务/其他因素。如果在作业运行之前,您有一个决定文件大小和线程数的
东西,那么您肯定可以动态设置
gridSize
。通常,可以将
gridSize
看作是具有不同节点/主机的“真实”网格的大小。线程只是网格的众多示例之一。