스프링 부트에서 여러 디스패처 서블릿/웹 컨텍스트 사용
부모 콘텍스트(서비스)와 자녀 콘텍스트(스프링 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();
}
}
이제 다른 클라이언트 컨텍스트(및 Dispatcher Servlet)를 추가합니다.ApiTwo.class
배열.두 가지 일을 해야 할 것 같아요.
- 를 이동하다
servletContainer
(따라서 MainApiApplication.class Configuration)을 자 컨텍스트에서 제외됩니다. - 경로 매핑 추가
/one/ -> ApiOne.class
그리고./two/ ApiTwo.class
그것을 하기 위한 스프링 부츠 방법은 무엇입니까?
@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;
}
}
작성하다ServletRegistrationBean
서블릿과 그 매핑을 선언합니다.또한 아마도 제외하기를 원할 것입니다.DispatcherServletAutoConfiguration
콜된 자동 설정으로부터, 콜된 자동 설정을 사용해 주세요.DispatcherServlet
에/
자신의 것을 덮어쓰다
편집 다른 포트에서 API를 실행할 필요가 없는 경우(그렇게 들리지 않는 경우) 아래 코멘트가 필요 없을 수 있다는 제 의견에도 불구하고, Spring Boot의 저자 중 한 명인 Dave Syer는 매우 유사한 질문에 답했습니다: Spring Boot에서 여러 서블릿 컨테이너/서블릿을 설정합니다.
언급URL : https://stackoverflow.com/questions/29096511/using-multiple-dispatcher-servlets-web-contexts-with-spring-boot
'programing' 카테고리의 다른 글
Map 내의 null 값과 bean 내의 null 필드가 Jackson을 통해 직렬화되지 않도록 하는 방법 (0) | 2023.03.05 |
---|---|
클라이언트 측 Javascript 클럭을 서버 날짜와 동기화하는 가장 좋은 방법 (0) | 2023.03.05 |
React.js의 OnClick 이벤트 바인딩 (0) | 2023.03.05 |
wordpress $wpdb에서 마지막으로 삽입된 ID 가져오기 (0) | 2023.03.05 |
ReactJS - javascript를 사용하여 컴포넌트의 displayName에 접속하려면 어떻게 해야 합니까? (0) | 2023.03.05 |