【问题标题】:Not finding resources with Spring PathMatchingResourcePatternResolver使用 Spring PathMatchingResourcePatternResolver 找不到资源
【发布时间】:2018-07-25 06:14:53
【问题描述】:
   @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 构造正确。

filePathfilePatternapplication.properties 文件中如下所示:

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

positionFile.patternName=PositionFile

【问题讨论】:

    标签: java spring spring-batch spring-io


    【解决方案1】:

    您没有在 PathMatchingResourcePatternResolver

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

    【讨论】:

    • 根据 Spring 文档,使用默认 c'tor 时:ClassLoader 访问将通过线程上下文类加载器发生
    【解决方案2】:

    我遇到了同样的问题,经过一番挖掘后,似乎 PathMatchingResourcePatternResolver 有时会用反斜杠解决问题,有时工作正常

    为了提高可靠性,我解决了用正斜杠替换所有反斜杠的问题

    试试这个:

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

    注意:Windows 平台上的 File.separator 也会出现问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 2015-07-13
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多