pathmatchingresourcepatternsolver-查找org.springframework.core.io.resource设置为“file:/”的原因

zc0qhyus  于 2021-07-14  发布在  Java
关注(0)|答案(0)|浏览(242)

我下面有一些代码,是用来扫描我的巴蒂斯Map文件。我正在扫描我的batis文件,但我认为我的问题更多的是spring问题。
列出的代码运行良好,但当我向存储在本地maven repo中的某个外部库添加依赖项时,pathmatchingresourcepatternresolver.getresources()方法会为特定jar返回“file:/”的资源。这导致spring在我的整个c驱动器中搜索mapper文件。
我能够确定是什么jar导致了这种行为,但我不确定解决方案是什么。为什么spring将资源设置为“file:/”?我不确定这个jar和其他返回正常资源条目的jar有什么问题。

  1. SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
  2. PathMatchingResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();
  3. Resource configLocation = patternResolver.getResource("classpath:mybatis/mybatis.config.xml");
  4. //this line leads to the issue
  5. Resource[] mapperLocations1 = patternResolver.getResources("classpath*:**/*Mapper.xml");

  1. //this is from the Spring PathMatchingResourcePatternResolver class
  2. protected Resource[] findPathMatchingResources(String locationPattern) throws IOException {
  3. String rootDirPath = determineRootDir(locationPattern);
  4. String subPattern = locationPattern.substring(rootDirPath.length());
  5. Resource[] rootDirResources = getResources(rootDirPath);
  6. Set<Resource> result = new LinkedHashSet<Resource>(16);
  7. for (Resource rootDirResource : rootDirResources) {
  8. rootDirResource = resolveRootDirResource(rootDirResource);
  9. URL rootDirUrl = rootDirResource.getURL();
  10. if (equinoxResolveMethod != null) {
  11. if (rootDirUrl.getProtocol().startsWith("bundle")) {
  12. rootDirUrl = (URL) ReflectionUtils.invokeMethod(equinoxResolveMethod, null, rootDirUrl);
  13. rootDirResource = new UrlResource(rootDirUrl);
  14. }
  15. }
  16. if (rootDirUrl.getProtocol().startsWith(ResourceUtils.URL_PROTOCOL_VFS)) {
  17. result.addAll(VfsResourceMatchingDelegate.findMatchingResources(rootDirUrl, subPattern, getPathMatcher()));
  18. }
  19. else if (ResourceUtils.isJarURL(rootDirUrl) || isJarResource(rootDirResource)) {
  20. result.addAll(doFindPathMatchingJarResources(rootDirResource, rootDirUrl, subPattern));
  21. }
  22. else {
  23. result.addAll(doFindPathMatchingFileResources(rootDirResource, subPattern));
  24. }
  25. }
  26. if (logger.isDebugEnabled()) {
  27. logger.debug("Resolved location pattern [" + locationPattern + "] to resources " + result);
  28. }
  29. return result.toArray(new Resource[result.size()]);

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题