【发布时间】: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