Java Spring批处理分区并行多个步骤?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23357024/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Spring batch Partitioning with multiple steps in parallel?
提问by Dangling Piyush
I have implemented spring batch partitioning for a single steps where a master step delegates its work to several slave threads which than gets executed in parallel. As shown in following image.(Reference Spring docs)
Now what if I have multiple steps which are to be executed in parallel? How to configure them in batch configuration? My current configuration is
我已经为单个步骤实现了 spring 批处理分区,其中主步骤将其工作委托给多个从属线程,然后并行执行。如下图所示。(参考Spring 文档)
现在如果我有多个要并行执行的步骤怎么办?如何在批量配置中配置它们?我目前的配置是
<batch:job id="myJob" restartable="true" job-repository="jobRepository" >
<batch:listeners>
<batch:listener ref="myJoblistener"></batch:listener>
</batch:listeners>
<batch:step id="my-master-step">
<batch:partition step="my-step" partitioner="my-step-partitioner" handler="my-partitioner-handler">
</batch:partition>
</batch:step>
</batch:job>
<batch:step id="my-step" >
<batch:tasklet ref="myTasklet" transaction-manager="transactionManager" >
</batch:tasklet>
<batch:listeners>
<batch:listener ref="myStepListener"></batch:listener>
</batch:listeners>
</batch:step>
My architecture diagrams should be like following image:
我的架构图应该如下图所示:
I am not sure even if it is possible using spring batch.Any ideas or I am way over my head to implement it.Thank you.
我不确定是否可以使用 spring 批处理。任何想法或我都无法实现它。谢谢。
回答by Arun Duraisamy
You can try the following.
您可以尝试以下操作。
<batch:job id="myJob" restartable="true" job-repository="jobRepository" >
<batch:listeners>
<batch:listener ref="myJoblistener"></batch:listener>
</batch:listeners>
<batch:step id="my-master-step">
<batch:partition step="my-step" partitioner="my-step-partitioner" handler="my-partitioner-handler">
</batch:partition>
</batch:step>
</batch:job>
<batch:step id="my-step" >
<batch:job ref="MyChildJob" job-launcher="jobLauncher"
job-parameters-extractor="jobParametersExtractor" />
<batch:listeners>
<batch:listener ref="myStepListener"></batch:listener>
</batch:listeners>
</batch:step>
<batch:job id="MyChildJob" restartable="false"
xmlns="http://www.springframework.org/schema/batch">
<batch:step id="MyChildStep1" next="MyChildStep2">
<batch:tasklet ref="MyChildStep1Tasklet" transaction-manager="transactionManager" >
</batch:tasklet>
</batch:step>
<batch:step id="MyChildStep2" next="MyChildStep3">
<batch:tasklet ref="MyChildStep2Tasklet" transaction-manager="transactionManager" >
</batch:tasklet>
</batch:step>
<batch:step id="MyChildStep3">
<batch:tasklet ref="MyChildStep3Tasklet" transaction-manager="transactionManager" >
</batch:tasklet>
</batch:step>
</batch:job>
回答by Debopam
I had similar requirement and solved it using below requirement
我有类似的要求并使用以下要求解决了它
<batch:job id="cycleJob">
<batch:step id="zStep" next="gStep">
<batch:partition partitioner="zPartitioner">
<batch:step>
<batch:tasklet throttle-limit="1">
<batch:chunk processor="itemProcessor" reader="zReader" writer="itemWriter" commit-interval="1">
</batch:chunk>
</batch:tasklet>
</batch:step>
<batch:handler task-executor="taskExecutor" grid-size="${maxThreads}" />
</batch:partition>
</batch:step>
<batch:step id="gStep" parent="zStep" next="yStep">
<batch:partition partitioner="gPartitioner">
<batch:step>
<batch:tasklet throttle-limit="1">
<batch:chunk processor="itemProcessor" reader="gReader" writer="itemWriter" commit-interval="1">
</batch:chunk>
</batch:tasklet>
</batch:step>
<batch:handler task-executor="taskExecutor" grid-size="${maxThreads}" />
</batch:partition>
</batch:step>
</batch:job>