2015-09-04 8 views
7

こんにちはSpringブートを使用するために私の古いコードを書き直そうとしています。 私は1人のリスナーを持っていますpublic class ExecutorListener implements ServletContextListenerSpringブートで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

あなたは物事のカップル試すことができます使用している場合

@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作成して、それを試すことができます:明示的@Beanとして 登録ExecutorListenerをSpringBoot 1.3.0+を使用している場合はすぐに3番目のオプションがあります。 Annサーブレット仕様3のServletContextListener実装を@WebListenerで置き換えてから、@Configurationクラスの1つを新しい@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

0

、あなたのExecutorListenerServletContextInitializerと、例えばを実施しますjavax.annotation.ManagedBeanと注釈を付けてください。そこから、onStartupメソッドを実装してください:

@ManagedBean 
public final class ExecutorListener implements ServletContextInitializer { 
    ... 
    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     ... 
    } 
} 
関連する問題