Упакованный файл JSON в WAR не обнаружен на AWS - PullRequest
0 голосов
/ 03 мая 2018

У меня есть приложение springboot, которое читает кучу файлов JSON в

SRC / основные / ресурсы / магазины

используя этот код:

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

Когда я запускаю это локально, с

clean bootRun

код работает нормально, и я получаю результаты запроса, который анализирует эти файлы.

Однако после создания файла WAR с

Война чистой сборки

и развертывая его в экземпляре AWS EC2, я не получаю результатов, которые, как я предполагаю, состоят в том, что файлы не извлекаются.

Я переименовал .war в .zip, чтобы проверить его, и не смог найти файлы json (если они не были переименованы и перемещены). Как я могу убедиться, что файлы правильно упакованы в WAR?

Редактировать: Теперь подтвердили, что проблема в том, что развернутый на сервере WAR не читает никаких файлов, тогда как локальный экземпляр запуска -.

1 Ответ

0 голосов
/ 03 мая 2018

Когда вы запускаете bootRun, он находит /shop в build/classes, поэтому path даст вам путь к локальной файловой системе, который естественно работает с File. Однако при упаковке в файл WAR path ресурса, найденного внутри WAR, больше не является допустимым путем к файловой системе. Он будет закодирован с помощью пути к файлу WAR и пути к ресурсу внутри WAR.

Чтобы заставить его работать, вместо File используйте javaClass.getResourceAsStream("/shop/somefile.json") и прочитайте из возвращенного InputStream.

Ваша следующая проблема будет в том, что с File вы можете пройти по дереву каталогов и автоматически получить все файлы json в /shop/. Теперь вы не можете, потому что нет каталога с файловой системой, через который можно пройти. Вам нужно будет использовать одну из этих библиотек для поиска подстановочных ресурсов на пути к классам. Например, Spring позволяет загружать все ресурсы, соответствующие /shop/**/*.json.

...