WAR 中的打包 JSON 文件未在 AWS 上提取

Packaged JSON file in WAR not picked up on AWS

我有一个 springboot 应用程序,它读取

中的一堆 JSON 文件

src/main/resources/shops

使用此代码:

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

当我 运行 在本地使用

clean bootRun

代码 运行 没问题,我从解析这些文件的查询中得到了结果。

然而,在使用

构建 WAR 文件时

clean build war

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

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

中正确打包

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

当你运行bootRun时,它会在build/classes下找到/shop,所以path会给你本地文件系统路径,这很自然File。但是,当打包在 WAR 文件中时,在 WAR 中找到的资源的 path 不再是有效的文件系统路径。它将使用 WAR 文件的路径和 WAR.

中的资源路径进行编码

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

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

的所有资源