如何解决跳过从属步骤的Spring批处理分区步骤?

时间:2019-01-05 23:55:56

标签: spring-batch

我有一个春季批处理,该处理将在数据库中处理日期并将已处理的列设置为标记N。有从步骤和主步骤。主步骤是分区,由此将有10个分区的从步骤同时运行。现在的问题是分区步骤已启动,但是它将跳过从属步骤并成功输出。

我已经有另一个类似的分区步骤可以正常工作。所有设置都相同。只是不同的步骤名称,项目读取器中的存储库以及项目处理器中的不同逻辑等。

我将提供伪代码

//item reader
itemreader(@Value("stepExecutionContext[to]" long to),@Value("stepExecutionContext[from]" long from),@Value("stepExecutionContext[id]") long id){
   logger("partition id: {} process from: {} to: {}",id,to,from);
   //logic, read chunk from to to
}

//item processor and writer, not much to say, just business logic.

//partitioner
public Map<String,ExecutionContext> partition(int grideSize){
    Map<String,ExecutionContext> map = new HashMap<>();
    int from = 1;
    int range = 10;
    for(i-gridSize) {
        ExecutionContext context = new ExecutionContext();
        context.put("from",from);
        context.put("to",from+range);
        from+=range;
        map.put(partitionkey + "i");
    }
    return map;
}

//partition step
step partitionStep(){
    return this.stepBuilderFactory.get("step1.master")
       .partitioner("step1", partitioner)
       .step(step1())
       .gridSize(10)
       .taskExecutor(taskExecutor)
       .build();
}

//step1
step step1(){
    return this.stepBuilderFactory.get("step1")
        <pojo,pojo> chunk(1)
        .reader(itemreader(null,null,null))
        .processor(itemprocessor())
        .writer(itemwriter())
        .build()
}

//job
job partionJob(){
    return this.jobBuilderFactory.get("partitionJob")
           .start(partitionStep())
           .build();
}

我希望项目阅读器中的记录器将打印出该信息并开始处理,因为这是我在另一个分区步骤中使用的方式。

在我的数据库中,batch_step_execution表显示了我期望的1个主步骤(分区步骤)和10个从属步骤(分区步骤),但是对于从属步骤,读取计数为0,这不应该是因为batch_step_execution_context表,分区程序信息正确显示,如

“ id”:0,“从”:1,“至”:10

itemreader应该从1读取到10,并将其传递给itemprocessor,然后由itemwriter保存。

我想知道发生了什么,所有信息都保存在spring batch meta表中,为什么仍然跳过从属步骤?来自分区程序的地图根本不是空的。

需要帮助。

0 个答案:

没有答案