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

时间:2018-05-03 08:32:33

标签: java spring-boot gradle kotlin war

我有一个springboot应用程序,可以在

中读取一堆JSON文件
  

的src /主/资源/商店

使用此代码:

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

当我在本地运行时,用

  

clean bootRun

代码运行正常,我从解析这些文件的查询中获得结果。

但是在使用

构建WAR文件时
  

清洁构建战争

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

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

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

1 个答案:

答案 0 :(得分:1)

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

要使其成功,而不是File,请使用javaClass.getResourceAsStream("/shop/somefile.json")并阅读返回的InputStream

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