Вы можете использовать очередь или go вперед, чтобы поместить список значений, который был сгенерирован после шага с проверками, и сохранить его как часть параметров задания в контексте выполнения задания.
Ниже приведен фрагмент для сохранения списка в контексте задания и чтения списка с помощью ItemReader.
Snippet реализует StepExecutionListener на этапе Tasklet, чтобы поместить созданный список,
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
//tenantNames is a List<String> which was constructed as an output of an evaluation logic
stepExecution.getJobExecution().getExecutionContext().put("listOfTenants", tenantNames);
return ExitStatus.COMPLETED;
}
Теперь «listOfTenants» читаются как часть шага, который имеет средство чтения (чтобы можно было читать по одному потоку за раз), процессор и средство записи. Вы также можете сохранить его как часть Очереди и получить в Читателе. Фрагмент для справки,
public class ReaderStep implements ItemReader<String>, StepExecutionListener {
private List<String> tenantNames;
@Override
public void beforeStep(StepExecution stepExecution) {
try {
tenantNames = (List<String>)stepExecution.getJobExecution().getExecutionContext()
.get("listOfTenants");
logger.debug("Sucessfully fetched the tenant list from the context");
} catch (Exception e) {
// Exception block
}
}
@Override
public synchronized String read() throws Exception {
String tenantName = null;
if(tenantNames.size() > 0) {
tenantName = tenantNames.get(0);
tenantNames.remove(0);
return tenantName;
}
logger.info("Completed reading all tenant names");
return null;
}
// Rest of the overridden methods of this class..
}