java在spring引导下使用多个dispatcher servlet/web上下文
我创建了一个具有父上下文(服务)和子上下文(SpringWebMVC控制器)的SpringBoot应用程序:
@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)。我想我必须做两件事:
- 将
servletContainer
(因此是MainApiApplication.class配置)移出子上下文并 - 添加路径映射
/one/ -> ApiOne.class
和/two/ ApiTwo.class
spring boot的方法是什么
# 1 楼答案
正如@josh ghiloni已经说过的,您需要为您想要创建的每个孤立的web上下文注册一个
ServletRegistrationBean
。 您需要从xml或java配置类创建应用程序上下文。您可以使用@Import
和@ComponentScan
注释将共享服务添加到父上下文中。以下是一个例子:# 2 楼答案
创建一个声明servlet及其映射的
ServletRegistrationBean
。您可能还想从调用的自动配置中排除DispatcherServletAutoConfiguration
,因为它将在/
注册一个DispatcherServlet
并覆盖您的编辑尽管我在下面的评论中说您可能不需要它,除非您需要在单独的端口上运行API(而且听起来不像),Spring Boot的作者之一Dave Syer在这里回答了一个非常类似的问题:Configure multiple servletcontainers/servlets with spring boot