Как узнать, что это последний элемент в 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 элементов и отправлять их в веб-службу и т. Д.).

Другие вопросы по тегам