如何按顺序初始化步骤?

时间:2019-09-04 16:28:51

标签: java spring-batch

我是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 {
    .
    .
    .
    } 
}

1 个答案:

答案 0 :(得分:1)

我将为此使用StepExecutionListener#beforeStep。比起在读者的构造函数中进行初始化,它更适合于步骤初始化。