Ниже приведены пользовательские реализации ListItemWriter и ListItemReader, которые позволяют определить свойство name
. Это свойство используется в качестве ключа для хранения списка в JobExecutionContext
.
В вашем случае, вы можете иметь 3 шага:
- JDBCReader> ListItemWriter
- Расчет тасклет
- ListItemReader> JDBCWriter
Если тасклет необходимо получить списки, вы может использоваться так же, как показано ниже (т.е. читать/записывать JobExecutionContext
).
Читатель:
public class CustomListItemReader<T> implements ItemReader<T>, StepExecutionListener {
private String name;
private List<T> list;
@Override
public T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
if (list != null && !list.isEmpty()) {
return list.remove(0);
}
return null;
}
@Override
public void beforeStep(StepExecution stepExecution) {
list = (List<T>) stepExecution.getJobExecution().getExecutionContext().get(name);
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
return null;
}
public void setName(String name) {
this.name = name;
}
}
Автор:
public class CustomListItemWriter<T> implements ItemWriter<T>, StepExecutionListener {
private String name;
private List<T> list = new ArrayList<T>();
@Override
public void write(List<? extends T> items) throws Exception {
for (T item : items) {
list.add(item);
}
}
@Override
public void beforeStep(StepExecution stepExecution) {}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
stepExecution.getJobExecution().getExecutionContext().put(name, list);
return null;
}
public void setName(String name) {
this.name = name;
}
}
Спасибо за ответ. Я попробую это решение и дам вам знать результат, и еще одна вещь, которую я хочу знать, должен ли я определять эти классы в файле xml-конфигурации весны? –
@AmitKammar Нет, вам не нужно объявлять эти классы весной. – Thrax
то как запустить эту работу? –