Bonjour, j'essaie de réécrire mon ancien code pour utiliser Spring Boot. J'ai un auditeur public class ExecutorListener implements ServletContextListener
.
Comment puis-je inscrire cet auditeur pour Spring Boot? J'ai essayé:
@SpringBootApplication
@ComponentScan
public class Application extends SpringBootServletInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
servletContext.addListener(new ExecutorListener());
}
}
Mais la méthode contextInitialized
n'est pas appelée.
Vous pouvez essayer plusieurs choses: Enregistrez explicitement ExecutorListener
comme @Bean
:
@Bean
public ExecutorListener executorListener() {
return new ExecutorListener();
}
ou
Vous pouvez l'essayer en créant explicitement 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;
}
Si vous utilisez un conteneur incorporé, il y aura bientôt une troisième option si vous utilisez SpringBoot 1.3.0+ Annotez votre implémentation ServletContextListener
avec @WebListener
à partir de la spécification de servlet 3, puis annotez l'une de vos classes Spring @Configuration
avec le nouveau @ServletComponentScan
(et indiquez éventuellement quels paquets analyser les filtres, les servlets et les écouteurs).
Seulement disponible dans la version 1.3.0 pour le moment, cependant: http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/web/servlet/ServletComponentScan.html
Si vous préférez que la découverte automatique utilise uniquement des annotations, assurez-vous que ExecutorListener
implémente les ServletContextInitializer
et ex. annotez-le avec javax.annotation.ManagedBean
. A partir de là, implémentez simplement la méthode onStartup
:
@ManagedBean
public final class ExecutorListener implements ServletContextInitializer {
...
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
...
}
}