使用非FlatFileItemReader批处理MultiResourceItemReader

时间:2018-11-27 10:02:14

标签: spring-batch

电流:

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: How to setup a FlatFileItemReader to read a json file? 但没有这样做。

阅读器:

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;
}

0 个答案:

没有答案