【问题标题】:Partitioner implements StepExecutionListener but beforeStep is not calledPartitioner 实现 StepExecutionListener 但未调用 beforeStep
【发布时间】:2017-09-09 15:57:45
【问题描述】:

我有这个工作,但是在运行它时,分区器中的 beforeStep 方法永远不会被调用。我做错了什么?

@Configuration
public class SomeJob {

@Bean(name = "some-job")
public Job job() {
    return jobBuilderFactory.get(getName())
            .incrementer(new RunIdIncrementer())
            .start(stepOne())
            .next(stepTwo())
            .build();
}

private Step stepOne() {
    TaskletStep stepOne = stepBuilderFactory
            .get("step-one")
            .<...>chunk(CHUNK_SIZE)
            .reader(someReader())
            .writer(someWriter())
            .build();

    return stepBuilderFactory
            .get("partitionedStepOne")
            .partitioner(stepOne)
            .partitioner("partition", partitioner())
            .taskExecutor(someExecutor())
            .gridSize(SIZE)
            .build();
}


@Bean
@Scope(value = "step", proxyMode = ScopedProxyMode.TARGET_CLASS)
Partitioner partitioner() {
    return new OffsetBasedPartitioner(NAME, storedArticleMasterDataRepository);
}
} // end of job class
....

public class OffsetBasedPartitioner implements Partitioner, StepExecutionListener {

@Override
public void beforeStep(StepExecution stepExecution) {
  ...
}
...
}

如果可能,我会避免使用 xml 配置文件。

【问题讨论】:

  • 我对JavaConfig不太了解,但我想partitioner()不会自动注册为监听器,但你必须手动注册
  • 谢谢@LucaBassoRicci,你知道怎么做吗?注释足够还是我需要xml配置?
  • 我想你可以在StepBuilder中找到一个listener()方法

标签: java spring-batch partitioning


【解决方案1】:

感谢@LucaBassoRicci 的建议,我在步骤定义中添加了分区器作为侦听器:

return stepBuilderFactory
        .get("partitionedStepOne")
        .partitioner(stepOne)
        .partitioner("partition", partitioner())
        .listener(partitioner())
        .taskExecutor(someExecutor())
        .gridSize(SIZE)
        .build();

剩下的都和上面一样,现在可以了:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多