[SPRING] 스프링 부트 : 임베디드 바람둥이에 다른 WAR 파일을 추가하는 방법은 무엇입니까?
SPRING스프링 부트 : 임베디드 바람둥이에 다른 WAR 파일을 추가하는 방법은 무엇입니까?
스프링 부트의 임베디드 톰캣은 개발과 배포 모두에 매우 편리합니다.
하지만 다른 (제 3 자) WAR 파일 (예 : GeoServer)을 추가해야한다면 어떻게해야할까요?
다음은 일반적인 절차입니다.
그러나 다음 구성이 가능하면 좋을 것입니다.
어떻게 할 수 있습니까?
최신 정보
스프링 부트 애플리케이션이 fat jar (= 실행 가능한 jar)로 만들어 졌을 때, 응답의 코드가 충분하지 않습니다. 수정 된 내용은 다음과 같습니다.
@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
Tomcat tomcat) {
try {
Context context = tomcat.addWebapp("/foo", "/path/to/foo.war");
WebappLoader loader =
new WebappLoader(Thread.currentThread().getContextClassLoader());
context.setLoader(loader);
} catch (ServletException ex) {
throw new IllegalStateException("Failed to add webapp", ex);
}
return super.getTomcatEmbeddedServletContainer(tomcat);
}
};
}
fat jar의 jar 파일은 시스템 클래스 로더에 의해로드 될 수 없으므로 명시 적 상위 클래스 로더를 지정해야합니다. 그렇지 않으면 추가 WAR은 WAR를 추가 한 스프링 부팅 응용 프로그램의 팻말에 라이브러리 jar를로드 할 수 없습니다.
해결법
-
==============================
1.Tomcat.addWebapp를 사용하여 포함 된 Tomcat에 war 파일을 추가 할 수 있습니다. javadoc에 따르면, "Tomcat의 웹 응용 프로그램 디렉토리에 웹 응용 프로그램을 추가하는 것과 동일합니다". Spring Boot에서이 API를 사용하려면 사용자 정의 TomcatEmbeddedServletContainerFactory 하위 클래스를 사용해야합니다.
Tomcat.addWebapp를 사용하여 포함 된 Tomcat에 war 파일을 추가 할 수 있습니다. javadoc에 따르면, "Tomcat의 웹 응용 프로그램 디렉토리에 웹 응용 프로그램을 추가하는 것과 동일합니다". Spring Boot에서이 API를 사용하려면 사용자 정의 TomcatEmbeddedServletContainerFactory 하위 클래스를 사용해야합니다.
@Bean public EmbeddedServletContainerFactory servletContainerFactory() { return new TomcatEmbeddedServletContainerFactory() { @Override protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer( Tomcat tomcat) { // Ensure that the webapps directory exists new File(tomcat.getServer().getCatalinaBase(), "webapps").mkdirs(); try { Context context = tomcat.addWebapp("/foo", "/path/to/foo.war"); // Allow the webapp to load classes from your fat jar context.setParentClassLoader(getClass().getClassLoader()); } catch (ServletException ex) { throw new IllegalStateException("Failed to add webapp", ex); } return super.getTomcatEmbeddedServletContainer(tomcat); } }; }
from https://stackoverflow.com/questions/31374726/spring-boot-how-to-add-another-war-files-to-the-embedded-tomcat by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 무시 무시한 콩 (0) | 2018.12.18 |
---|---|
[SPRING] Spring 보안 및 Java 구성을 사용하는 사용자 정의 인증 관리자 (0) | 2018.12.18 |
[SPRING] 수동으로 Spring Annotation Validation 호출 (0) | 2018.12.18 |
[SPRING] <spring : url />을 <a> 태그와 함께 사용하는 방법? (0) | 2018.12.18 |
[SPRING] 고유 한 bean을 가진 스프링 autowiring : 봄 예상되는 단일 일치하는 bean은 찾았지만 2 (0) | 2018.12.18 |