2015-09-04 13 views
7

Hallo, ich versuche meinen alten Code neu zu schreiben, um Spring Boot zu verwenden. Ich habe einen Listener public class ExecutorListener implements ServletContextListener.So registrieren Sie den ServletContextListener im Spring Boot

Wie kann ich diesen Listener für Spring Boot registrieren? Ich habe versucht:

@SpringBootApplication 
@ComponentScan 
public class Application extends SpringBootServletInitializer { 

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

} 

Aber die contextInitialized Methode wird nicht aufgerufen.

Antwort

10

Sie können einige Dinge versuchen: Register ExecutorListener als @Bean ausdrücklich:

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

oder

Sie können es versuchen, mit explizit ServletRegistrationBean erstellen:

@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

Wenn ein mit eingebetteten Container, wird es bald eine dritte Option geben, wenn SpringBoot 1.3.0+ Ann verwendet wird otieren Sie Ihre ServletContextListener Implementierung mit @WebListener von Servlet Spec 3, dann kommentieren Sie eine Ihrer Spring @Configuration Klassen mit der neuen (und optional sagen, welche Pakete für Filter, Servlets und Listener zu scannen).

Nur in 1.3.0+ im Moment aber: http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/web/servlet/ServletComponentScan.html

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

0

Falls Sie lieber die automatische Erkennung Annotationen verwenden, nur Ihr machen ExecutorListener die ServletContextInitializer implementieren und z.B. kommentieren Sie es mit javax.annotation.ManagedBean. Von dort, implementieren Sie einfach die onStartup Methode:

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