Spring Batch, как прочитать все файлы json из папки и всех ее подпапок, используя PathMatchingResourcePatternResolver - PullRequest
0 голосов
/ 27 декабря 2018

Я использую Spring Batch MultiResourceItemReader для чтения нескольких файлов.Эти файлы расположены в родительском каталоге и его подкаталогах.

Уже пробовали:

  1. Считайте файлы по собственному настроенному коду и создайте массив Resource вручную.

  2. Использовать PathMatchingResourcePatternResolver, как видно из примера кода (вдохновленный этим Поиск ресурсов с помощью PathMatchingResourcePatternResolver и URLClassloader в JARs

    @Bean
    public MultiResourceItemReader<List<SingleJsonRowInput>> 
    multiResourceItemReader() {
    PathMatchingResourcePatternResolver  patternResolver = new 
    PathMatchingResourcePatternResolver();
    Resource resources[] = null;;
    try {
        resources = 
        patternResolver.getResources("file:C:\\inputFolder\\**\\*.json");
    } catch (IOException e) {
        e.printStackTrace();
    }
    MultiResourceItemReader<List<SingleJsonRowInput>> 
    multiResourceItemReader = new MultiResourceItemReader<>();
    multiResourceItemReader.setResources(resources);
    multiResourceItemReader.setDelegate(new 
    ItemReaderForMulti(fileManager));
    return multiResourceItemReader;
    }
    

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Вместо использования обратной косой черты в Windows - решение состоит в том, чтобы использовать Unix \ Linux как синтаксис:

Не работает: resources = patternResolver.getResources ("file: C: \\inputFolder \\ ** \\ *. json ");

Работает хорошо: resources = patternResolver.getResources (" file: C: / inputFolder / ** / *. json ");

0 голосов
/ 28 декабря 2018

Вы можете использовать следующий фрагмент:

PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("file:/root/folder/**/*.json");

**/* будет рекурсивно возвращать файлы из root/folder.Затем вы передаете массив ресурсов в MultiResourceItemReader.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...