首页 > 解决方案 > WAR 中的打包 JSON 文件未在 AWS 上获取

问题描述

我有一个 springboot 应用程序,它读取一堆 JSON 文件

src/main/资源/商店

使用此代码:

File(javaClass.getResource("/shops/").path).walkTopDown().forEach {

当我在本地运行它时,使用

干净启动运行

代码运行良好,我从解析这些文件的查询中得到结果。

但是,在构建 WAR 文件时

清洁建设战争

并将其部署到 AWS 的 EC2 实例,我没有得到任何结果,我认为这是因为文件没有被拾取。

我将 .war 重命名为 .zip 进行检查,但找不到 json 文件(除非它们已被重命名和移动)。如何确保文件在 WAR 中正确打包?

编辑:现在已经确认问题是服务器部署的 WAR 没有读取任何文件,而本地运行实例是。

标签: javaspring-bootgradlekotlinwar

解决方案


当您运行时bootRun,它会/shop在 下找到build/classes,因此path会为您提供本地文件系统路径,该路径自然适用于File. 但是,当打包在 WAR 文件中时,在 WARpath中找到的资源的 不再是有效的文件系统路径。它将使用 WAR 文件的路径以及 WAR 内资源的路径进行编码。

为了使它工作,而不是File,使用javaClass.getResourceAsStream("/shop/somefile.json")并从InputStream返回的读取。

您的下一个问题将是File您可以遍历目录树并自动获取/shop/. 现在你不能,因为没有文件系统目录可以遍历。您需要使用其中一个库在类路径上查找通配符资源。例如,Spring 允许您加载所有匹配的资源/shop/**/*.json


推荐阅读