您可以使用队列或继续将步骤之后生成的值列表与验证一起放入作业执行上下文中,并将其作为作业参数的一部分存储。
下面是将列表存储到作业上下文并使用 ItemReader 读取列表的片段。
Snippet 在 Tasklet 步骤中实现 StepExecutionListener 以放置构造的 List,
@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”作为具有 Reader(允许一次读取一个线程)、Processor 和 Writer 的 Step 的一部分读取。您还可以将其存储为 Queue 的一部分并在 Reader 中获取。片段供参考,
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..
}