我有一个springboot应用程序,可以在
中读取一堆JSON文件的src /主/资源/商店
使用此代码:
File(javaClass.getResource("/shops/").path).walkTopDown().forEach {
当我在本地运行时,用
clean bootRun
代码运行正常,我从解析这些文件的查询中获得结果。
但是在使用
构建WAR文件时清洁构建战争
并将其部署到AWS的EC2实例,我得不到任何我认为是因为文件没有被提取的结果。
我将.war重命名为.zip来检查它,我找不到json文件(除非它们已被重命名和移动)。如何确保文件在WAR中正确打包?
编辑:现在已经确认问题是服务器部署的WAR没有读取任何文件,而本地运行实例是。
答案 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
匹配的所有资源。