java – Spring Batch Multi Threading – 如何让每个线程读
许多论坛已经多次询问过这个问题.但我没有看到适合我的答案.我试图在我的春季批处理实现中实现多线程步骤. >有一个包含100k记录的临时表 截至目前,我只有一个JVM.所以我想在Multi Threaded步骤中做这个,而不是考虑基于分区的方法. 请帮忙…… 我提到了pro spring批处理书并创建了一个临时步骤监听器,它使用作业参数从作业配置xml接受运行ID,如下所示
我找不到的是这个?这个“run.id”来自哪里.我在书中的任何地方都没有看到.我在我的spring批处理中复制了相同的实现,当我运行它时,我看到异常说run.id是不可识别的.请帮我讲一下如何做到这一点? 最佳答案
>我没有找到的是这个?这个“run.id”来自哪里
JobParameters 这只是您传递给jobParameters的参数.通常使用每个实例的不同run.id(传统名称),因为框架无法知道JobParameters的哪些更改使其成为“下一个”作业实例. 您可以将此“run.id”传递给jobParameters:
有关详细信息,请查看JobParametersIncrementer的documentation. >如何在步骤侦听器和读取器之间传递公共ID,以便每个线程都有自己的一组记录来处理 别 这是一条非常危险的路线,因为Step中的许多参与者(例如读者和编写者)都是有状态的,如果状态没有被线程隔离,那么这些组件在多线程步骤中不可用.特别是Spring Batch的大多数现成的读者和作者都不是为多线程使用而设计的. 分区 我建议使用Partitioning.它比它看起来简单得多,你仍然可以使用多个线程.看一下使用partitioning的样本批处理作业,它来自“Spring Batch samples”,它是: 使用PartitionHandler SPI显示多线程步骤执行.该示例使用TaskExecutorPartitionHandler来传播读取多个线程的一些文件的工作,每个线程执行一步.关键组件是PartitionStep和MultiResourcePartitioner,负责划分工作.请注意,正在进行分区的Step中的读者和编写者是步骤范围的,因此它们的状态不会在执行的线程之间共享. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |