Как узнать, что это последний элемент в ItemProcessor SpringBatch
У меня есть следующий ItemProcessor, мне нужно знать, является ли этот элемент последним элементом, который отправляет читатель. Это возможно?
Другим возможным решением будет ItemReader для отправки списка
Line
с размером
NUMBER_OF_LINES_TO_CALL_WEBSERVICE
, но я мог найти примеры того, как изменить.
@Override
public List<Line> process(Line line) {
lineList.add(line);
if (lineList.size() == NUMBER_OF_LINES_TO_CALL_WEBSERVICE) {
callWs(lineList);
return lineList; // goes to ItemWriter to write the response from ws in database
}
if( /* TODO if last line */) {
callWs(lineList);
return lineList;
}
return null;
}
private void callWs(List<Line> lineList){
...
//Get response from webservice and add info to lines
}
@Override
public void afterChunk(ChunkContext chunkContext) {
if (lineList.size() == NUMBER_OF_LINES_TO_CALL_WEBSERVICE) {
lineList.clear();
}
}
Читатель
JpaPagingItemReader
:
@Bean
@StepScope
public JpaPagingItemReader<Line> itemReader(@Qualifier("EntityManagerFactory") EntityManagerFactory entityManagerFactory) {
String queryStr = "select l from Line l" ;
return new JpaPagingItemReaderBuilder<Linha>()
.name("lineReader")
.entityManagerFactory(entityManagerFactory)
.queryString(queryStr)
.pageSize(PAGE_SIZE)
.build();
}
1 ответ
Я хочу сгруппировать строки в списке из 100 элементов для отправки в веб-сервис, и когда последний элемент отправляется процессору, оставшиеся строки отправляются в веб-сервис.
Вы можете использовать этап, ориентированный на фрагменты, с размером фрагмента 100. На этом этапе буферизация выполняется за вас, и первая точка в процессе, где у вас есть доступ к списку элементов, находится в
Когда у вас есть список элементов, вы можете делать с ним все, что захотите (например, проверять последний элемент, фильтровать первые 99 элементов и отправлять их в веб-службу и т. Д.).