Spring - java.io.FileNotFoundException: 类路径资源因不存在而无法打开

3

我正在开发一个Spring Boot应用程序,其中添加了一个依赖项。这个依赖项有一个spring.xml文件。我正在扫描这个xml文件,并创建bean。其中一个bean正在查找类路径下的hibernate.properties。我已经将此属性文件添加到我的应用程序的资源文件夹下。然而,我仍然看到下面列出的异常。请问我漏掉了什么?

 <util:properties id="HibernateProperties" location="classpath:hibernate.properties"/>

java.io.FileNotFoundException: 类路径资源 [hibernate.properties] 无法打开,因为它不存在。

1
你试过 classpath:/hibernate.properties 吗? - Jim Garrison
当我运行 mvn spring-boot:run 时,删除 classpath: 对我有用。当我打包并运行 java -jar target\App.war 时也有效。 - Chloe
1个回答

2
这段文本的英文原文大致意思是:

这里有来自 Spring 的一些文档

使用类路径(classpath)的 Ant 样式模式(patterns)来搜索资源时,如果要搜索的根包在多个类路径位置中都存在,则不能保证找到匹配的资源。这是因为例如 com/mycompany/package1/service-context.xml 这样的资源可能只在一个位置上,但当使用类似于 classpath:com/mycompany/**/service-context.xml 的路径时就会出现问题。

因此,

<util:properties id="HibernateProperties" location="classpath*:hibernate.properties"/> 

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

1
谢谢@kuhajeyan。我无法修改spring.xml,因为它在外部jar包中。在这种情况下还有其他可以做的事情吗? - Punter Vicky
@PunterVicky 我想你可以定义自己的属性文件来覆盖类路径中已经存在的文件。在这里查看 https://dev59.com/zGjWa4cB1Zd3GeqPpli5 - kuhajeyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接