我正在学习春季批次。我目前正在处理看起来像这样的生物数据:
interface Variant {
public String getChromosome();
public int getPosition();
public Set<String> getGenes();
}
(A Variant 是基因组上可能与某些基因重叠的位置)。
我已经写了一些Itemreaders/Itemwriters
现在我想进行一些分析每个基因。因此,我想将每个基因(gene1,gene2,... geneN)的工作流程分开,以便对与一个基因相关的所有变异进行一些统计。
为此实现Partioner的最佳方法是什么(无论如何它是正确的类吗?)?我见过的所有例子都使用了一些&#39;索引&#39;或有限数量的gridSize
?此外,partiton(gridsize)返回的地图是否必须少于gridSize项目,或者我可以返回“&#39; big&#39; map和spring-batch能够并行运行不超过gridSize
个作业吗?如何在最后加入数据?
感谢
编辑:或者我应该看看MultiResourceItemWriter?
答案 0 :(得分:2)
使用Spring Batch的分区功能时,涉及两个主要类,Partitioner
和PartitionHandler
。
<强> Partitioner
强>
Partitioner
接口负责将要处理的数据划分为分区。它有一个方法Partitioner#partition(int gridSize)
,负责分析要分区的数据并返回Map
,每个分区有一个条目。 gridSize
参数实际上只是可以使用或忽略的整体计算的一部分输入。例如,如果gridSize
是5,我可以选择返回5个分区,我可以选择过分区并返回5的倍数,或者我可以分析数据并意识到我只需要3个分区并完全忽略gridSize
值。
<强> PartionHandler
强>
PartitionHandler
负责将Partitioner
返回的分区委派给工作人员。在Spring生态系统中,有三个提供的PartitionHandler
实现,一个TaskExecutorPartitionHandler
将工作委托给当前JVM内部的线程,MessageChannelPartitionHandler
委托工作到远程工作者监听某种形式消息中间件,以及Spring Cloud Task项目中的DeployerPartitionHandler
,它动态启动新工作程序以执行提供的分区。
如上所述,请回答您的具体问题:
Map
中返回任意数量的项目。如上所述,gridSize
实际上是指导。