java - Spring 启动 |多个调度程序 Servlet

标签 java spring spring-boot spring-mvc

我从一个新的 Spring Boot 应用程序开始,我需要有两个 Dispatcher servlet。我正在做这样的事情:

public class ApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext container) {

        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.register(AppConfig.class);

        container.addListener(new ContextLoaderListener(rootContext));

        AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
        dispatcherContext.register(DispatcherConfig.class);

        ServletRegistration.Dynamic uiDispatcher = container.addServlet("uiDispatcher",
                new DispatcherServlet(dispatcherContext));
        uiDispatcher.setLoadOnStartup(1);
        uiDispatcher.setInitParameter("initializeJ2EE", "false");
        uiDispatcher.addMapping("/ui/*");

        ServletRegistration.Dynamic utilDispatcher = container.addServlet("utilDispatcher",
                new DispatcherServlet());
        utilDispatcher.setLoadOnStartup(1);
        utilDispatcher.setInitParameter("initializeJ2EE", "false");
        utilDispatcher.addMapping("/util/*");

        container.addListener(new ContextLoaderListener(rootContext));
    }

这看起来是正确的做法吗?过去,我从未需要使用“WebApplicationInitializer”来启动应用程序。如果我需要多个 Dispatcher servlet,是否需要这样做,或者是否有更好的方法来处理这个问题?

最佳答案

是的,确实如此。 Spring 为我们提供了 web.xmlWebApplicationInitializer 来配置 DispatcherServlet(甚至是两者的混合)。 如果您对多个 DispathcherServletweb.xml 感兴趣。这是一个例子

<servlet>
    <description>Monitor</description>
    <servlet-name>monitor</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>monitor</servlet-name>
    <url-pattern>/monitor</url-pattern>
</servlet-mapping>

<servlet>
    <description>Metrics</description>
    <servlet-name>metrics</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>metrics</servlet-name>
    <url-pattern>/metrics/</url-pattern>
</servlet-mapping>

关于java - Spring 启动 |多个调度程序 Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61766320/

相关文章:

java - 在 Java 中对项目进行分组

java - 尽管添加了 android :usesCleartextTraffic and android:networkSecurityConfig,但仍不允许明文 HTTP 流量

java - 清洁代码以在 Spring @PatchMapping 中对域类进行部分修补?

java - 连接特定组件字段类型的特定子类(@SpringBootApplication 和 @Autowire)

java - 在编译时为方法添加注解

java - 请帮助理解这段 Java 代码 :-)

java - 如何查找任意网页/HTML页面对应的JSP文件?

java - 为什么当我在存储库中保存对象时相同的 id 会递增?

java - 在 JPA 中,如果一行存在,我可以有一个只读 boolean 值吗?

java - 在 spring boot 中加载上下文配置