2015-09-04 18 views
7

Ciao Sto cercando di riscrivere il mio vecchio codice per utilizzare Spring Boot. Ho un ascoltatore public class ExecutorListener implements ServletContextListener.Come registrare ServletContextListener in spring boot

Come posso registrare questo listener per Spring Boot? Ho provato:

@SpringBootApplication 
@ComponentScan 
public class Application extends SpringBootServletInitializer { 

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

} 

Ma il metodo contextInitialized non viene chiamato.

risposta

10

Si può provare paio di cose: Registrati ExecutorListener come @Bean esplicitamente:

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

o

Si può provare con la creazione esplicitamente 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; 
} 
13

Se si utilizza un contenitore incorporato, ci sarà presto una terza opzione se si utilizza SpringBoot 1.3.0+ Ann ota l'implementazione ServletContextListener con @WebListener dalla spec. servlet 3, quindi annota una delle tue classi Spring @Configuration con il nuovo @ServletComponentScan (e, facoltativamente, indica quali pacchetti scansionare per filtri, servlet e listener).

Disponibile solo in 1.3.0+ al momento però: http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/web/servlet/ServletComponentScan.html

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

0

nel caso si preferisca rilevamento automatico utilizzando le annotazioni solo, rendere il vostro ExecutorListener implementare il ServletContextInitializer e per esempio annotarlo con javax.annotation.ManagedBean. Da lì, è sufficiente implementare il metodo onStartup:

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