我是 Spring Batch 的新手,我正在尝试执行作业的两个步骤。两者都必须在执行 read、process 和 write 方法之前初始化一些东西。但我不明白我该怎么做。每次我启 Action 业时,这两个步骤都会同时初始化。我希望它们按作业顺序初始化。
简单来说,我做了类似的事情:
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 也是同样的东西。打印两个“test”,然后开始运行步骤。
public class Reader2 implements ItemReader<Model2>{
public Reader2() {
initialize();
}
public void initialize() {
System.out.println("test");
}
@Override
public Model2 read() throws Exeption {
.
.
.
}
}
最佳答案
我会使用 StepExecutionListener#beforeStep对于这个问题。它更适合步骤初始化,而不是在读取器的构造函数中进行初始化。
关于java - 如何按顺序初始化步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57792490/