我将一个Spring应用程序上传到Heroku但应用程序因以下错误而崩溃:
java.io.FileNotFoundException: class path resource [com/myname/myapp/config/dao-context.xml
该文件肯定存在,并且它在GIT中,并且应用程序在本地成功运行。
这里有什么想法吗?
答案 0 :(得分:4)
我怀疑当你在本地运行时,它会将类路径上的文件作为文件系统上的常规文件(即不在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
答案 1 :(得分:0)
对于此问题的未来访问者,我通过将DAO XML配置文件转换为Java Config方法克服了问题,因此Spring不再需要该XML文件。这并没有直接解决无法找到XML文件的问题,但是额外的好处是我现在正在使用更现代,更简洁的Java Config方法。