Развертывание приложения Spark-Java (Gradle, Maven) в AWS Elastic Beanstalk

У меня возникают проблемы с подключением к конечным точкам моего Java-приложения, развернутого в AWS Elastic Beanstalk. Приложение обрабатывает ряд запросов POST и предназначено для обслуживания мобильного приложения, поэтому на самом сервере нет статических файлов. Я использовал среду Spark Java, которая правильно находит конечные точки при тестировании на Localhost, но не на AWS Elastic Beanstalk.

Я могу развернуть Exploded war на EB (на котором запущен веб-сервер Tomcat), но все отправляемые мной запросы возвращают ошибку 404: ресурс не найден. Spark java работает на встроенном сервере Jetty, поэтому для запуска на Tomcat я сделал, как предлагалось в их документации (http://sparkjava.com/documentation#other-web-server): я реализовал интерфейс SparkApplication, переместив все конечные точки из main () в init (), и добавил предлагаемый код в Интернет. xml файл.

Загруженный .war содержит META-INF с web.xml, lib (с библиотеками gradle) и классами (с моим скомпилированным выводом). Опять же, никаких статических файлов.

Подробнее:

Я использую плагин Elastic Beanstalk IntelliJ (Ultimate) для развертывания, и на этом этапе я проверил, что это ничем не отличается от развертывания .war непосредственно на панели инструментов EB. Я открыл все порты и подключения в настройках безопасности, чтобы исключить любые проблемы с подключением. Я считаю, что это просто вопрос того, что сервлет не отображает URL-адреса. Какие-либо предложения?


person Diego Fernando Lorenzo-Casabue    schedule 12.10.2017    source источник


Ответы (2)


Запустите это как войну с локальной коробкой, чтобы убедиться, что у вас есть правильная проводка. Я сделал это недавно - Spark Java на Beanstalk, но я думаю, что развернул его как jar. Beanstalk поддерживает только прямую java-банку (объединяет ее с nginx). Я думаю, что при развертывании как jar мне нужно было что-то сделать, чтобы указать порт прослушивания 4567, который Spark Java использует по умолчанию.

Я также запускал Spark Java как войну в Tomcat, но я не думаю об AWS - я считаю, что в этом случае я развернул как jar.

person Jim Weaver    schedule 12.10.2017
comment
Хорошо, позвольте мне попробовать .jar - person Diego Fernando Lorenzo-Casabue; 13.10.2017
comment
Это вариант с AWS и более естественный для Spark Java. Я запускал Spark под Tomcat как войну - нужно иметь в виду, что военный Tomcat предоставит контекст, который является военным именем, которое вы должны добавить в URL-адрес перед вашими путями REST api. Итак, если у вас есть blah.war на 8090, localhost: 8090 / blah / myrestpath, а не localhost: 8090 / myrestpath. - person Jim Weaver; 14.10.2017
comment
Спасибо! Оказалось, проблема в порте. - person Diego Fernando Lorenzo-Casabue; 16.10.2017

Решено! У меня был код внутри основного класса, который менял порт. Хотя это было необходимо для работы в локальной среде, это противоречило AWS, который автоматически назначает порт.

person Diego Fernando Lorenzo-Casabue    schedule 16.10.2017