gpt4 book ai didi

java - 具有不同 Maven 模块的 Spring 资源解析器

转载 作者:行者123 更新时间:2023-11-30 10:42:23 24 4
gpt4 key购买 nike

因此对于我们的测试结构,我们目前有一个基础模块,其中有一些我们常用的配置文件等(例如:ds.properties)。现在我正在不同的模块中运行测试,我正在尝试加载所有 .properties 文件(以获取所有配置)并且我正在使用

(new PathMatchingResourcePatternResolver(getClass().getClassLoader())).getResources("classpath:*.properties")

现在这只是查找 alpha.properties(我的模块中的属性文件)。有没有办法获取所有模块中的属性文件?

一些我已经尝试过的东西:

(new PathMatchingResourcePatternResolver(getClass().getClassLoader())).getResources("classpath:ds.properties")

返回我想要但显然不是 auth.properties 的 ds.properties。

(new PathMatchingResourcePatternResolver(getClass().getClassLoader())).getResources("classpath*:*.properties")

同样只有 alpha.properties

(new PathMatchingResourcePatternResolver(getClass().getClassLoader())).getResources("classpath*:**/*.properties")

从我不想要的 jre 返回 alpha.properties 和一堆 .properties 文件。

最佳答案

我懒得在文档中找到引用,但它本质上是这样的:

顶级类路径扫描未找到与模式匹配的所有资源。原因写在文档中。

将您的属性文件放在一个包中(maven 的 src/main/resources/somefolder)并调整您的扫描路径,它应该会按预期工作。 (类路径*:somefolder/*.properties)

完整性:来自文档

请注意,classpath*: 与 Ant 样式模式结合使用时,在模式开始之前只能可靠地与至少一个根目录一起工作,除非实际目标文件驻留在文件系统中。这意味着像“classpath*:*.xml”这样的模式不会从 jar 文件的根目录中检索文件,而只会从扩展目录的根目录中检索文件。这源于 JDK 的 ClassLoader.getResources() 方法的限制,该方法仅返回传入的空字符串(指示要搜索的潜在根)的文件系统位置。

如果要搜索的根包在多个类路径位置可用,则不能保证具有“classpath:”资源的 Ant 样式模式能找到匹配的资源。这是因为资源如

com/mycompany/package1/service-context.xml可能只在一个位置,但是当一条路径如

类路径:com/mycompany/**/service-context.xml用于尝试解析它,解析器将处理 getResource("com/mycompany"); 返回的(第一个)URL。如果这个基础包节点存在于多个类加载器位置,实际的最终资源可能不在下面。因此,在这种情况下,最好使用具有相同 Ant 样式模式的“classpath*:”,它将搜索包含根包的所有类路径位置。

关于java - 具有不同 Maven 模块的 Spring 资源解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38163735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com