[英]Spring batch Partitioning with multiple steps running in Sequentially?
我需要創建一個依次運行多個從屬步驟的主步驟。 我可以在主機中定義單個從機,但是我需要順序運行從機。
@Primary
@Profile(MASTER)
@Bean("masterStep")
public Step partitionCreateStepForRemote(StepBuilderFactory stepBuilderFactory,
@Qualifier("slave1") Step step,
MatchAsyncConfig asyncConfig,
MatchingAccountPartitioner partitioner,
JMSPartitionHandler messageChannelPartitionHandler,
JobRepository jobRepository,
@Qualifier("stepLocator") StepLocator stepLocator
) {
SimpleStepExecutionSplitter splitter = new SimpleStepExecutionSplitter();
splitter.setPartitioner(partitioner);
splitter.setJobRepository(jobRepository);
return stepBuilderFactory.get("masterStep")
.partitioner(step)
.partitionHandler(messageChannelPartitionHandler)
.splitter(splitter)
.taskExecutor(asyncConfig.getAsyncExecutor())
.build();
}
有沒有辦法在同一個分區下的單個主步驟中定義多個從步驟,如下所示?
public Step partitionCreateStepForRemote(StepBuilderFactory stepBuilderFactory,
@Qualifier("slave1") Step step,
@Qualifier("slave2") Step step,
@Qualifier("slave3") Step step,
MatchAsyncConfig asyncConfig,
MatchingAccountPartitioner partitioner,
JMSPartitionHandler messageChannelPartitionHandler,
JobRepository jobRepository,
@Qualifier("stepLocator") StepLocator stepLocator
) {}
我只需要在從屬步驟內部定義Flow。 該流程將按順序進行。 從屬步驟不過是在內部定義所有子步驟而已。 因此,所有從屬步驟均並行運行,每個從屬均順序運行子級從屬步驟。
/**
* @param stepBuilderFactory step for run each partition
* @return Step step 6 partition match
*/
@Profile({SINGLE, SLAVE}) //Not applicable for MASTER profile in remote partitioning case
@Bean("slaveStep")
public Step slaveStep(StepBuilderFactory stepBuilderFactory,
@Qualifier("readFromFileFlow") Flow flow
) {
return stepBuilderFactory.get("slaveStep")
.listener(stepListener())
.flow(flow)
.build();
}
@Profile({SINGLE, SLAVE})
@Bean
public ChildSlaveListener stepListener(){
return new ChildSlaveListener();
}
@Profile({SINGLE, SLAVE})
@Bean("readFromFileFlow")
public Flow readFromFileFlow(@Qualifier("childSlaveStep1") Step childSlaveStep1,
@Qualifier("childSlaveStep2") Step childSlaveStep2) {
// @formatter:off
return new FlowBuilder<Flow>("readFromFileFlow")
.start(childSlaveStep1)
.on(FAILED).fail()
.from(childSlaveStep1)
.on(COMPLETED).to(childSlaveStep2)
.start(childSlaveStep2)
.on(FAILED).fail()
.from(childSlaveStep2)
.on(COMPLETED).end()
.end();
// @formatter:on
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.