[SPRING] 스프링 부트와 함께 다중 디스패처 서블릿 / 웹 컨텍스트 사용
SPRING스프링 부트와 함께 다중 디스패처 서블릿 / 웹 컨텍스트 사용
부모 컨텍스트 (서비스)와 자식 컨텍스트 (spring-webmvc 컨트롤러)가있는 스프링 부팅 응용 프로그램을 만들었습니다.
@Configuration
public class MainApiApplication {
public static void main(String[] args) {
new SpringApplicationBuilder()
.parent(Services.class)
.child(ApiOne.class, MainApiApplication.class)
.run(args);
}
@Bean
public EmbeddedServletContainerFactory servletContainer() {
return new TomcatEmbeddedServletContainerFactory();
}
}
이제 ApiTwo.class 구성에 다른 클라이언트 컨텍스트 (및 DispatcherServlet)를 추가하려고합니다. 나는 두 가지 일을해야한다고 생각한다.
봄 부팅 방법은 무엇입니까?
해결법
-
==============================
1.@ josh-ghiloni는 이미 말했듯이, 생성하고자하는 모든 격리 된 웹 컨텍스트에 대해 ServletRegistrationBean을 등록해야합니다. xml 또는 java config 클래스에서 응용 프로그램 컨텍스트를 만들어야합니다. @Import 및 @ComponentScan 주석을 사용하여 상위 컨텍스트에 공유 서비스를 추가 할 수 있습니다. 다음은 그 예입니다.
@ josh-ghiloni는 이미 말했듯이, 생성하고자하는 모든 격리 된 웹 컨텍스트에 대해 ServletRegistrationBean을 등록해야합니다. xml 또는 java config 클래스에서 응용 프로그램 컨텍스트를 만들어야합니다. @Import 및 @ComponentScan 주석을 사용하여 상위 컨텍스트에 공유 서비스를 추가 할 수 있습니다. 다음은 그 예입니다.
import org.springframework.boot.SpringApplication; import org.springframework.boot.context.embedded.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.context.support.XmlWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; //@ComponentScan({"..."}) //@Import({}) public class Starter { public static void main(String[] args) throws Exception { SpringApplication.run(Starter.class, args); } @Bean public ServletRegistrationBean apiV1() { DispatcherServlet dispatcherServlet = new DispatcherServlet(); XmlWebApplicationContext applicationContext = new XmlWebApplicationContext(); applicationContext.setConfigLocation("classpath:/META-INF/spring/webmvc-context.xml"); dispatcherServlet.setApplicationContext(applicationContext); ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(dispatcherServlet, "/api/1/*"); servletRegistrationBean.setName("api-v1"); return servletRegistrationBean; } @Bean public ServletRegistrationBean apiV2() { DispatcherServlet dispatcherServlet = new DispatcherServlet(); AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); applicationContext.register(ResourceConfig.class); dispatcherServlet.setApplicationContext(applicationContext); ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(dispatcherServlet, "/api/2/*"); servletRegistrationBean.setName("api-v2"); return servletRegistrationBean; } }
-
==============================
2.서블릿과 그 매핑을 선언하는 ServletRegistrationBean을 생성하십시오. DispatcherServletAutoConfiguration을 호출 된 자동 구성에서 제외하고자 할 수도 있습니다. DispatcherServlet을 /에 등록하고 자신을 재정의 할 것이기 때문입니다
서블릿과 그 매핑을 선언하는 ServletRegistrationBean을 생성하십시오. DispatcherServletAutoConfiguration을 호출 된 자동 구성에서 제외하고자 할 수도 있습니다. DispatcherServlet을 /에 등록하고 자신을 재정의 할 것이기 때문입니다
편집 당신이 별도의 포트에서 실행되는 API를 필요로하지 않는 한 (그리고 그것은 당신처럼 보이지 않는다), Spring Boot의 저자 인 Dave Syer는 여기에서 매우 비슷한 질문에 답했다. : 스프링 부트로 여러 servletcontainers / servlet 구성
from https://stackoverflow.com/questions/29096511/using-multiple-dispatcher-servlets-web-contexts-with-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] URI가있는 HTTP 요청에 대한 매핑이 없습니다. Spring MVC [duplicate] (0) | 2018.12.31 |
---|---|
[SPRING] JSP에서 PropertyPlaceholderConfigurer에 지정된 속성 파일의 속성을 사용하는 방법 (0) | 2018.12.31 |
[SPRING] Spring Security로 파일 업로드 MaxUploadSizeExceededException을 멋지게 처리하는 법 (0) | 2018.12.31 |
[SPRING] 다중 애플리케이션 컨텍스트, 다중 디스패처 서블릿 (0) | 2018.12.31 |
[SPRING] 봄 보안. 사용자를 로그 아웃하는 방법 (oauth2 토큰 취소) (0) | 2018.12.31 |