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
.
的所有资源
我有一个 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
.