У меня есть подпружиненная партия, которая будет обрабатывать дату в базе данных с обработанным столбцом, установленным на флаг N. Есть подчиненный шаг и главный шаг. Главный шаг - это раздел, при этом будет запущено 10 разделенных подчиненных шагов. Теперь проблема в том, что шаг раздела запущен, но он пропустит шаг slave и приведет к успешному выводу.
У меня уже есть другой подобный шаг раздела, работающий правильно. Все настройки одинаковы. Просто другое имя шага, репозиторий в считывателе элементов и другая логика в итепроцессоре и т. Д.
Я предоставлю код пресудо
//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, информация о разделителе отображается правильно, например
"Идентификатор": 0, "от": 1, "к": 10
itemreader должен прочитать от 1 до 10 и передать его в itemprocessor, а затем itemwriter сохранить его.
Интересно, что случилось, вся информация сохраняется в мета-таблице весеннего пакета, почему шаг подчиненного устройства все еще пропускается? карта от разделителя совсем не пуста.
Нужна помощь.