Не найдено ресурсов с Spring PathMatchingResourcePatternResolver

   @Bean
    @StepScope
    public MultiResourceItemReader<PosRow> multiResourceItemReader() {
        MultiResourceItemReader<PosRow> resourceItemReader = new MultiResourceItemReader<>();
        Resource[] resources = new Resource[0];
        String path = "file:" + filePath + File.separator + filePattern + "*";
        log.info("Looking for resource files matching {}", path);
        try {
            PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            resources = resolver.getResources(path);
        } catch (IOException e) {
            log.error("Problem with getting resource files ", e);
        }
        resourceItemReader.setResources(resources);
        resourceItemReader.setDelegate(posRowReader());
        return resourceItemReader;
    }

Я не могу получить ресурсы, хотя в этом месте есть файлы. На предыдущих шагах файлы копируются, а затем я пытаюсь найти файлы, используя PathMatchingResourcePatternResolver, На моей консоли напечатано следующее:

 c.s.p.p.batch.config.BatchConfiguration  : Looking for resource files matching file:C:\Dev\workspace\batch\src\main\resources\localPath\PositionFile*
o.s.b.item.file.MultiResourceItemReader  : No resources to read. Set strict=true if this should be an error condition.

Я вижу, что locationPattern правильно построен.

filePath а также filePattern выглядеть так в application.properties файл:

positionFile.local-path=C:\\Dev\\workspace\\batch\\src\\main\\resources\\localPath

positionFile.patternName=PositionFile

2 ответа

Вы не устанавливаете ClassLoader в PathMatchingResourcePatternResolver

ClassLoader cl = this.getClass().getClassLoader();
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);

Я столкнулся с теми же проблемами, и после некоторого копания кажется, что PathMatchingResourcePatternResolver иногда имеет проблемы с разрешением с помощью обратных косых черт, иногда работает нормально

Для большей надежности решил проблему, заменив все обратные косые черты на косые черты.

попробуй это:

      PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
path = path.replace("\\", "/");
resources = resolver.getResources(path);

NB: проблема также возникает с File.separator на платформе Windows.

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