在Spring Boot中使用多个分派器Servlet/Web上下文 [英] Using multiple dispatcher servlets / web contexts with spring boot
问题描述
我用父上下文(服务)和子上下文(spring-webmvc控制器)创建了一个Spring Boot应用程序:
I created a spring boot application with a parent context (services) and child context (spring-webmvc controllers):
@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).我想我必须做两件事:
Now I want to add another client context (and DispatcherServlet) for my ApiTwo.class configuration. I think I have to do two things:
- 将servletContainer(因此是MainApiApplication.class配置)移出子上下文,并且
- 添加路径映射/one/-> ApiOne.class和/two/ApiTwo.class
采用弹簧引导的方式是什么?
What is the spring boot way to do it?
推荐答案
正如@ josh-ghiloni所说,您需要为要创建的每个隔离的Web上下文注册ServletRegistrationBean
.
您需要从xml或java config类创建应用程序上下文.您可以使用@Import
和@ComponentScan
批注将共享服务添加到父上下文.这是一个示例:
As @josh-ghiloni already said, you need to register a ServletRegistrationBean
for every isolated web context you want to create.
You need to create an application context from a xml or java config class. You can use @Import
and @ComponentScan
annotation to add shared services to the parent context. Here is an example:
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;
}
}
这篇关于在Spring Boot中使用多个分派器Servlet/Web上下文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!