2011-01-20 45 views
3

我有一個函數,我想在tomcat啓動併成功加載所有屬性後立即執行。我不想使用ServletContextListener,因爲這需要在Tomcat啓動之前啓動該函數。有人可以建議如何去解決這個問題嗎?啓動事件後的Tomcat彈簧

+2

在* tomcat啓動之前,如何調用`ServletContextListener`,這沒有任何意義。它在servlet上下文開始時調用。 – skaffman 2011-01-20 13:13:17

+0

我想我的意思是說,該功能將啓動之前啓動完成。 ServletContextListener不會等到tomcat完成引導,並且我的函數將在bootsrap的原因上執行。 – Bitmap 2011-01-20 13:20:19

回答

6

ServletContextListener.contextInitialized(..)是在給定應用程序的所有servlet和篩選器已初始化後調用的方法。

  • 如果有多個ServletContextListener S,它們中的一些其他的(邏輯)
  • 如果有多個應用程序(因此多重執行緒)他們中的一些人之前開始之前調用。

更新我現在假設你的設置,雖然你沒有分享:

  • 你通過一個傾聽者開始彈簧(而不是與一個servlet)
  • 配置中冬眠春天

在這種情況下,你有兩個選擇:

0

您可以創建一個啓動的servlet,然後添加到結束後的web.xml中:

<servlet> 
     <servlet-name>StartupServlet</servlet-name> 
     <servlet-class>com.your.package.MyStartupServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
</servlet> 


public class MyStartupServlet extends HttpServlet { 

    public void init(ServletConfig config) throws ServletException { 
     try { 
      // Startup code here 
     } catch (Exception e){ 
      // Log exception 
     } 
    } 

    public java.lang.String getServletInfo() { 
     return "StartupServlet"; 
    } 
} 
0

我覺得JMX Tomcat的支持能滿足您的要求,甚至沒有ServletContextListener是DEPLOYE d在容器中。