생산용 외부 컨테이너에 스프링 부트 내장 컨테이너 또는 전쟁 파일
두 경우 모두 스프링 부트를 구성할 수 있습니다.여기서 질문하는 것은 어느 쪽이 더 견고하고 권장되는가 하는 것입니다.스프링 부트 매뉴얼에서는 실전 가동 환경에 도입하는 권장 방법을 찾을 수 없었기 때문에 임베디드 컨테이너 사용에 대한 우려는 다음과 같습니다.
- Windows 또는 Linux 서비스로 설정하는 경우 jar 파일이 가장 좋은 옵션입니까?
- jar 파일을 사용하면 서버를 재시작할 수 없습니다.
- 앞으로는 같은 컨테이너에 더 많은 애플리케이션이 필요할 것 같습니다.
- 머신을 재부팅하면 java -jar를 다시 실행해야 합니다.
일반적으로 문제는 jar 파일을 사용하여 운영에서 java -jar jarname.jar로 실행하는 것과 제공된 대로 tomcat을 war set하고 생성된 전쟁을 빈 tomcat으로 설정하는 것 중 어느 것이 더 나은가 하는 것입니다.
당신이 나를 도와줄 수 있기를 바랍니다.
---편집---
대부분의 경우 답은 일반 웹 애플리케이션 또는 REST 웹 서비스를 위한 것입니다.
항아리 패키징은 실전 가동에 매우 적합합니다.필요한 경우에만 전쟁에 복귀하는 것이 좋습니다.이것은, 도입 환경을 제어할 수 없는 경우가 많은 경우입니다(대기업에서는 자주 있는 일입니다).
Spring Boot Reference 에는 Unix/Linux/Windows 서비스로 Spring Boot 기반 애플리케이션을 설정하는 방법에 대한 장이 있습니다.Spring Boot 응용 프로그램을 설치하는 중입니다.
고객님의 우려에 대해서:
앞으로는 같은 컨테이너에 더 많은 애플리케이션이 필요할 것 같습니다.
임베디드 컨테이너를 사용하면 같은 머신에서 더 많은 애플리케이션을 실행할 필요가 있는 경우 2개의 애플리케이션을 개별적으로 시작해야 합니다.각각 다른 포트에서 실행되면 실제로는 2개의 컨테이너가 실행됩니다.즉, 어플리케이션이 서로 분리되는 것이 좋습니다.
한 달 전쯤 당신 같은 질문을 받았어요.제 결론은 다음과 같습니다.
1) JAR:
- 다른 포트(Linux의 경우 java -jar...)를 사용하여 모든 애플리케이션을 독립적으로 실행할 수 있습니다. > app_backets.log &)로 라우팅 할 수 있습니다(nginx 등).재기동에는 문제가 없습니다.커스텀 bash 스크립트를 작성할 수 있습니다(예: ps aux | grep appname and kill by PID).
- 그러나 프로덕션 앱 구성에 몇 가지 문제가 있습니다.속성 파일이 항아리에 보관됩니다.
2) 전쟁
- 컨테이너에 배포하고 실행할 수 있습니다.서버 관리가 용이합니다.앱을 재구성하려면 컨테이너 내의 아카이브되지 않은 폴더에서 속성 파일을 열고 필요에 따라 변경한 후 컨테이너를 다시 시작하십시오.따라서 관리와 구성이 쉬워집니다.
- 그러나 이 서버에서 다른 포트를 사용하여 다른 앱을 실행하려면 컨테이너의 다른 복사본을 설치하고 구성해야 합니다.
그래서 실제로 전쟁 앱을 사용하면 관리 및 재구성이 jar보다 쉬워집니다.
Windows 서비스에 대해서는 잘 모르지만 Linux에서는 RC-Script에 jar 실행을 추가할 수 있습니다(따라서 응용 프로그램을 특정 실행 수준에서 시작합니다).스프링 부트 앱의 경우 jar에 symlink하기만 하면 다른 서비스와 마찬가지로 시작/정지/etc를 실행할 수 있습니다.Spring Boot Application as a Service를 참조하십시오.
시스템 또는 JVM을 다시 시작하시겠습니까?셧다운 메커니즘은 스프링 부트에 내장되어 있기 때문에 활성화만 하면 됩니다(다른 사람이 할 수 없도록 보안 기능을 활성화해야 합니다).를 참조해 주십시오.Spring Boot Application을 올바른 방법으로 셧다운하는 방법
Spring-Boot은 마이크로 서비스를 가능하게 합니다.따라서 웹 앱/마이크로 서비스별로 1개의 내장형 웹 앱 컨테이너를 갖는 것이 아이디어입니다.이것에 의해, 1개의 서비스만 정지했을 때에, 모든 서비스가 없어지는 리스크를 저감 할 수 있습니다.
네, 리, 그, 그, 그, yes, yes
catalina.sh|bat start
모든 재기동 후에.또는 적절한 스타트업 스크립트를 추가합니다(1 참조).
나는 네가 차라리 옛날 방식으로 하는 게 낫다고 생각해.'취향의 문제'라는 답변에도 불구하고, 찬성하는 한 가지 주장이 있습니다: 유일한 의존관계는 JVM입니다!나머지(web-app-container, db-drivers, 기타 라이브러리)는 모두 제공하는 패키지의 일부입니다.그리고 만약 당신이 다음 릴리즈를 위해 컨테이너를 바꾸기로 결정한다면, 그렇게 될 것입니다.
프로덕션에서 "전쟁" 파일을 사용해야 하는 이유가 하나 더 있습니다.Springboot는 Jetty가 던진 오류를 마스킹했지만 Jetty에 전개된 WAR은 올바르게 검출했습니다(단, 아래 문제는 아직 검토 중입니다).
https://github.com/spring-projects/spring-boot/issues/8917#issuecomment-294673487
서버 같은 건 잘 모르는데 제가 추천하는 건
모노리식 애플리케이션을 사용하는 경우 외부 Tomcat과의 전쟁을 사용하는 것이 좋습니다.
Micro Service 응용 프로그램에 사용하는 경우 다른 포트를 가진 내장형 Tomcat을 사용합니다.각 마이크로 서비스 애플리케이션은 서로 독립적입니다.
언급URL : https://stackoverflow.com/questions/39626267/spring-boot-embedded-container-or-war-file-in-an-external-container-for-producti
'programing' 카테고리의 다른 글
IE10/11 Ajax XHR 오류 - SCRIPT7002: XMLHttpRequest:네트워크 오류 0x2ef3 (0) | 2023.03.18 |
---|---|
버튼을 클릭하면 update_order_review()가 표시됩니다. (0) | 2023.03.18 |
Typescript 매개 변수 이름에서 물음표는 무엇입니까? (0) | 2023.03.18 |
React.js - 속성 객체를 하위 구성요소로 전달하는 방법 (0) | 2023.03.18 |
속성 탐색기처럼 작동하는 GUI 기반 또는 웹 기반 JSON 편집기 (0) | 2023.03.18 |