Spting Batch MultiResourceItemReader с не-FlatFileItemReader - PullRequest
0 голосов
/ 27 ноября 2018

Текущий поток:

1.BatchItemReader implements ItemReader<List<SingleJsonRowInput>>
2.BatchItemProcessor implements ItemProcessor<List<SingleJsonRowInput>>
3.BatchItemWriter implements ItemWriter<List<String>>

Входные данные представляют собой текстовый файл, каждая строка представляет файл Json.В настоящее время программа хорошо работает с одним файлом, я хотел бы реализовать MultiResourceItemReader, но так как мой читатель не реализует этот ResourceAwareItemReaderItemStream - его нельзя применить к MultiResourceItemReader.я пытался:

1. Implementing ResourceAwareItemReaderItemStream 
2. Changing my reader to be FlatFileItemReader as advised here:

Spring Batch: как настроить FlatFileItemReader для чтения файла JSON? , но не удалось сделать это.

Reader:

public class BatchItemReader implements ItemReader<List<SingleJsonRowInput>>{

    private int count = 0;
    private FileManager fileManager;
    private Gson gson = new Gson();

    public List<SingleJsonRowInput> read() {

        return readLine();
    }

    public BatchItemReader(FileManager fileManager) {
        this.fileManager = fileManager;
    }

    private List<SingleJsonRowInput> readLine() {
        List<String> result = fileManager.readTextJsonFile("C:\\Users\\orenl\\Desktop\\small.json");

        List<SingleJsonRowInput> singles = new LinkedList<>();
        SingleJsonRowInput singleJsonRowInput = null;
        for (String line : result) {
            System.out.println("#### Reading line: " + line);
            singleJsonRowInput = gson.fromJson(line, SingleJsonRowInput.class);
            singles.add(singleJsonRowInput);
        }
        if (count > 5) {
            return null;
        }
        count++;
        return singles;

    }

}

MultiResourceItemReader:

@Bean
public MultiResourceItemReader<SingleJsonRowInput> multiResourceItemReader(){
    Resource resources[]=new Resource[]{new FileSystemResource("small.json")};
    MultiResourceItemReader<SingleJsonRowInput>  multiResourceItemReader=new MultiResourceItemReader<>();
    multiResourceItemReader.setResources(resources);
    multiResourceItemReader.setDelegate(new FlatFileItemReader<>());
    return multiResourceItemReader;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...