我正在 Heroku 中运行 Spring Boot 应用程序,使用 Maven 来管理构建生命周期。
在应用程序的初始化阶段,我想读取打包到 JAR 文件中的文件。
为了设法获取文件的内容,我正在使用 Spring 实用程序类ResourceUtils
,我使用特殊前缀表示文件的路径classpath:
.
我正在使用的代码如下所示:
String pathToMyFile = "classpath:com/myapp/myFile.test"
List<String> fileLines = Files.readLines(ResourceUtils.getFile(pathToMyFile), IOConstants.DEFAULT_CHARSET_TYPE);
当我在本地计算机中执行应用程序时,此代码按预期工作。
但是当我将应用程序推送到 Heroku 时,出现以下错误:
Caused by: java.io.FileNotFoundException: class path resource [com/myapp/myFile.test]
cannot be resolved to absolute file path because it does not reside in the
file system: jar:file:/app/target/myapp.jar!/com/myapp/myFile.test
我已经运行了heroku run bash
我已经检查过该文件是否位于它应该在的位置(在罐子内)。
而且,根据错误跟踪,Spring找到了该文件,因为它转换了路径classpath:com/myapp/myFile.test
to jar:file:/app/target/myapp.jar!/com/myapp/myFile.test
我怀疑当您在本地运行时,它会从分解的 JAR 文件(即作为文件系统上的常规文件)中获取类路径上的文件。
在 Heroku 上,它位于 JAR 文件中,这意味着它不是常规文件,必须作为输入流读取,可能如下所示:
ClassLoader cl = this.getClass().getClassLoader();
InputStream inputStream = cl.getResourceAsStream(pathToMyFile);
那么你可能会使用缓冲读取器 http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html读取行。但也许ResourceUtils
有更好的方法。
您可以通过运行与您的系统中相同的命令来在本地重现该问题Profile
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)