【发布时间】:2016-09-11 00:17:40
【问题描述】:
我将 Spring 应用程序上传到 Heroku,但应用程序崩溃并出现以下错误:
java.io.FileNotFoundException: class path resource [com/myname/myapp/config/dao-context.xml
文件肯定是有的,而且在git里面,app在本地运行成功。
你知道这里发生了什么吗?
【问题讨论】:
标签: java spring-mvc heroku
我将 Spring 应用程序上传到 Heroku,但应用程序崩溃并出现以下错误:
java.io.FileNotFoundException: class path resource [com/myname/myapp/config/dao-context.xml
文件肯定是有的,而且在git里面,app在本地运行成功。
你知道这里发生了什么吗?
【问题讨论】:
标签: java spring-mvc heroku
我怀疑当您在本地运行时,它会将类路径上的文件作为文件系统上的常规文件(即不在 JAR 中)拾取。
在 Heroku 上,它可能位于 JAR 文件中,这意味着它不是常规文件,必须作为输入流读取,可能如下所示:
ClassLoader cl = this.getClass().getClassLoader();
InputStream inputStream = cl.getResourceAsStream("com/myname/myapp/config/dao-context.xml");
您可能可以通过运行与Procfile 中相同的命令在本地重现该问题。
如果不是这种情况,则通过运行以下命令确保 Heroku 上存在该文件:
$ heroku run ls com/myname/myapp/config/dao-context.xml
【讨论】:
@ImportResource({"classpath:com/myname/myapp/config/dao-context.xml"}) 中引用该文件。我将如何使用 ClassLoader?
对于这个问题的未来访问者,我通过将我的 DAO XML 配置文件转换为 Java Config 方法克服了这个问题,因此 Spring 不再需要该 XML 文件。这并没有直接解决无法找到 XML 文件的问题,但额外的好处是我现在使用的是更现代、更简洁的 Java Config 方法。
【讨论】: