我有一个春季批处理,该处理将在数据库中处理日期并将已处理的列设置为标记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表中,为什么仍然跳过从属步骤?来自分区程序的地图根本不是空的。
需要帮助。