如何在 Spring boot 中注册 ServletContextListener

你好,我正在尝试重写我的旧代码以使用Spring Boot。我有一个听众。public class ExecutorListener implements ServletContextListener

如何为 Spring Boot 注册此侦听器?我试过了:

@SpringBootApplication
@ComponentScan
public class Application extends SpringBootServletInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        servletContext.addListener(new ExecutorListener());
    }

}

但该方法未被调用。contextInitialized


答案 1

您可以尝试以下几种方法:显式注册为:ExecutorListener@Bean

@Bean
public ExecutorListener executorListener() {
   return new ExecutorListener();
}

你可以通过显式创建 ServletRegistrationBean 来尝试它:

@Bean
public DispatcherServlet dispatcherServlet() {
    DispatcherServlet servlet=new DispatcherServlet();
    servlet.getServletContext().addListener(new ExecutorListener());
    return  servlet;
}

@Bean
public ServletRegistrationBean dispatcherServletRegistration() {
    ServletRegistrationBean registrationBean = new ServletRegistrationBean(dispatcherServlet(), "/rest/v1/*");
    registrationBean
            .setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);


    return registrationBean;
}

答案 2

如果使用嵌入式容器,那么如果使用SpringBoot 1.3.0+用servlet spec 3注释你的实现,然后用新的注释你的Spring类之一(并选择性地告诉它扫描哪些包来查找过滤器,servlet和侦听器),很快就会有第三种选择。ServletContextListener@WebListener@Configuration@ServletComponentScan

目前仅在1.3.0 +中可用:http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/web/servlet/ServletComponentScan.html

文档: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners


推荐