2015-09-04 87 views
7

您好我正在尝试重写我的旧代码以使用Spring Boot。 我有一个听众public class ExecutorListener implements ServletContextListener如何在春季开机注册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方法不叫。

回答

10

您可以尝试两件事情: 注册ExecutorListener@Bean明确:

@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; 
} 
13

如果使用的是:

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

您可以显式地创建ServletRegistrationBean试试吧嵌入式容器,如果使用SpringBoot 1.3.0以上版本,很快会有第三种选择 Ann将您的ServletContextListener实现与@WebListener从servlet规范3中剔除,然后使用新的@ServletComponentScan(或者可选地告诉它要扫描哪些程序包来筛选过滤器,servlet和侦听器)注释您的Spring @Configuration类之一。

在虽然时刻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

0

如果你使用注解而已,让你的ExecutorListener落实ServletContextInitializer和例如喜欢自动发现用javax.annotation.ManagedBean对其进行标注。从那里,只需实施onStartup方法:

@ManagedBean 
public final class ExecutorListener implements ServletContextInitializer { 
    ... 
    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     ... 
    } 
}