我是Spring Batch的新手,我正在尝试执行一项工作的两个步骤。两者都必须在执行read,process和write方法之前初始化一些东西。但是我不知道该怎么办。每次启动作业时,两个步骤都会同时初始化。我希望它们按照工作顺序进行初始化。
简单地说,我做了类似的事情:
public Job job() {
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.start(step1())
.next(step2())
.build();
}
public Step step1() {
return stepBuilderFactory.get("step1")
.<Model1, Model1>chunk(2)
.reader(reader1())
.processor(processor1())
.writer(writer1())
.build();
}
public Step step2() {
return stepBuilderFactory.get("step2")
.<Model2, Model2>chunk(2)
.reader(reader2())
.processor(processor2())
.writer(writer2())
.build();
}
@StepScope
public Reader1 reader1() {
return new Reader1();
}
@StepScope
public Processor1 processor1() {
return new Processor1();
}
@StepScope
public Writer1 writer1() {
return new Writer1();
}
@StepScope
public Reader2 reader2() {
return new Reader2();
}
@StepScope
public Processor2 processor2() {
return new Processor2();
}
@StepScope
public Writer2 writer2() {
return new Writer2();
}
那是我想要在第一步之后初始化的Reader2类。 Reader1是同一件事。都打印了两个“测试”,然后开始执行步骤。
public class Reader2 implements ItemReader<Model2>{
public Reader2() {
initialize();
}
public void initialize() {
System.out.println("test");
}
@Override
public Model2 read() throws Exeption {
.
.
.
}
}