2017-10-12 2 views
0

AWS Elastic Beanstalk에 배포 된 Java 응용 프로그램의 끝점에 연결하는 데 문제가 있습니다. 응용 프로그램은 여러 POST 요청을 처리하며 모바일 응용 프로그램을 제공하기위한 것이므로 서버 자체에는 정적 파일이 없습니다. Localhost에서 테스트 할 때 끝점을 올바르게 찾지 만 AWS Elastic Beanstalk에서는 발견하지 못하는 Spark Java 프레임 워크를 사용했습니다.Spark-Java (Gradle, Maven) 응용 프로그램을 AWS Elastic Beanstalk에 배포

Exploded war를 EB (Tomcat 웹 서버 실행)에 배포 할 수 있지만 보내는 모든 요청에는 404 오류 : Resource not Found가 반환됩니다. Spark java는 임베디드 Jetty 서버에서 실행되므로 Tomcat에서 실행하려면 설명서 (http://sparkjava.com/documentation#other-web-server)에서 제안한대로 수행했습니다. SparkApplication 인터페이스를 구현하여 main()에서 init()로 모든 끝점을 이동하고 제안 된 코드를 추가했습니다 web.xml 파일에 추가하십시오.

업로드 된 .war에는 web.xml, lib (gradle 라이브러리 포함) 및 클래스 (컴파일 된 출력 포함)가 포함 된 META-INF가 포함되어 있습니다. 다시 말하지만 정적 파일이 없습니다.

자세한 내용 :

내가 배포 할 탄성 콩 줄기 인 IntelliJ (궁극) 플러그인을 사용하고이 시점에서 나는 이것이 EB 대시 보드에 직접 .WAR를 배포 다르지 않습니다 것을 테스트했다. 모든 포트 및 연결을 보안 설정에서 열어 연결 문제를 해결했습니다. 나는 이것이 URL을 매핑하지 않는 서블릿의 문제라고 생각한다. 어떤 제안?

답변

0

로컬 상자에 전쟁으로 실행하여 배선이 올바른지 확인하십시오. 필자는 최근 Beanstalk에서 Spark Java를 수행했지만, 병으로 배포했다고 생각합니다. Beanstalk은 바로 java jar 파일을 지원합니다 (nginx와 함께 사용). 스파이더 Java가 기본적으로 사용하는 수신 포트 4567을 지정하기 위해 항아리로 배포했을 때 뭔가를해야했습니다.

나는 Tomcat에서도 전쟁으로 Spark Java를 실행했지만, AWS에서는 생각하지 않습니다. 나는 병으로 배치 한 경우를 믿습니다.

+0

좋아, .jar를 사용해 보겠습니다. –

+0

AWS의 옵션이며 Spark Java에 더 자연스러운 옵션입니다. 나는 Tomcat에서 전쟁으로 스파크를 돌렸다. 명심해야할 것은 전쟁 바람둥이가 당신이 REST API 경로 앞에 URL에 추가해야만하는 전쟁 이름 인 컨텍스트를 제공한다는 것이다. 그래서 8090, localhost : 8090/blah/myrestpath가 아니라 localhost : 8090/myrestpath에 blah.war가있는 경우. –

+0

감사합니다. 그것은 항구 문제로 밝혀졌습니다. –

0

해결! 포트를 변경하는 주 클래스 내부에 코드가있었습니다. 이것은 로컬 환경에서 실행하는 데 필수적 이었지만 AWS와 충돌하여 포트를 자동으로 할당합니다.

관련 문제