在Spring Boot上关闭DispatcherServlet

时间:2015-06-10 13:53:07

标签: java spring spring-boot

如何在SpringBoot上禁用DispatcherServlet,即使尝试通过servlet注册禁用它,也会在日志中显示uri映射:

-setKeepAliveTimeout:handler:

LOG

@Bean
public ServletRegistrationBean servletRegistrationBean(final DispatcherServlet dispatcherServlet) {
    final ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(dispatcherServlet);
    servletRegistrationBean.setEnabled(false);

    return servletRegistrationBean;
}

感谢任何帮助!

3 个答案:

答案 0 :(得分:13)

我将下面的代码添加到我的主类中,并且从日志中删除了servlet。

@SpringBootApplication(exclude = { DispatcherServletAutoConfiguration.class })

答案 1 :(得分:6)

来自Spring引导文档here

  

Spring Boot希望从应用程序的根目录/向下提供所有内容。如果您希望将自己的servlet映射到该URL,则可以执行此操作,但当然您可能会丢失其他一些Boot MVC功能。要添加自己的servlet并将其映射到根资源,只需声明类型为@Bean的{​​{1}}并为其指定特殊的bean名称Servlet(您还可以创建不同类型的bean)使用该名称,如果你想关闭它而不是替换它。)

答案 2 :(得分:0)

如果您排除DispatcherServletAutoConfiguration.class, 那么您也需要排除ErrorMvcAutoConfiguration.class,否则至少我会排除。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration;
import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@SpringBootApplication(exclude = { DispatcherServletAutoConfiguration.class, ErrorMvcAutoConfiguration.class})
@EnableAspectJAutoProxy
public class CoreApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(CoreApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(CoreApplication.class);
    }
}