如何在部署到 Elastic Beanstalk 的 Spring Boot 项目中找到资源文件?
Posted
技术标签:
【中文标题】如何在部署到 Elastic Beanstalk 的 Spring Boot 项目中找到资源文件?【英文标题】:How do I locate resource files in a Spring Boot project deployed to Elastic Beanstalk? 【发布时间】:2020-01-06 19:38:11 【问题描述】:我的 Spring Boot 项目在 src/main/resources 文件夹中包含一个 XML 文件,这是此类文件的常用位置。
在本地和 Pivotal CloudFoundary 上运行,我能够找到文件并将其读入,但在 Beanstalk 上,该过程会导致一个空文件。
定位和读取文件的代码:
URL url = getClass().getResource("/myFile.xml");
LOG.info("File location: " + url.toString());
生成的日志条目:
File location: jar:file:/var/app/current/application.jar!/WEB-INF/classes!/myFile.xml
当我通过 SSH 连接到 EC2 实例时,我可以在指定目录中找到该 jar。
我是否需要配置 Maven 才能将此文件移动到某处?
更新
我已经意识到我需要像在 InputStream 中一样对待这个文件,因为它被打包在 jar 中。
我现在使用以下代码,导致以下错误:
FileUtils.copyInputStreamToFile(new ClassPathResource("myFile.xml").getInputStream(), myFile);
java.lang.NullPointerException: null
at org.apache.commons.io.FileUtils.openOutputStream(FileUtils.java:345) ~[commons-io-2.5.jar:2.5]
和
FileUtils.copyInputStreamToFile(new ClassPathResource("classpath:myFile.xml").getInputStream(), myFile);
java.io.FileNotFoundException: class path resource [classpath:myFile.xml] cannot be opened because it does not exist
谢谢!
【问题讨论】:
【参考方案1】:你的 pom.xml 是什么样子的?也许有一个资源过滤器处于活动状态?
在 Spring 应用程序中,您可以使用 File file = ResourceUtils.getFile("classpath:myFile.xml");
来读取资源文件。
你能用ResourceUtils
检查结果吗?
这里是 api 文档的链接: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/ResourceUtils.html#getFile-java.lang.String-
【讨论】:
以上是关于如何在部署到 Elastic Beanstalk 的 Spring Boot 项目中找到资源文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 TFS 2017 部署到 Elastic Beanstalk?
部署到 Elastic Beanstalk 时如何安装 Go 依赖项?
如何在部署到 Elastic Beanstalk 的 Spring Boot 项目中找到资源文件?
如何以编程方式获取部署到 Elastic Beanstalk 环境的应用程序版本