2014-03-13 176 views
2

是否有任何機制,生命週期事件或回調在春季或tomcat通知一旦tomcat服務器sartup完成(我有8個Web應用程序和隊列配置,我寧願收到通知回到每個應用程序一旦所有應用程序啓動)。我知道Spring有應用程序監聽器,可以在Web應用程序初始化後使用。但是我不能在我的情況下使用它,因爲一旦所有的Web應用程序初始化,我都希望收到通知。回覆tomcat服務器啓動完成

** EDITED * * *

我添加實施的Tomcat監聽器記錄消息。但我絕對沒有想法在哪裏鉤住這個聽衆。

我試着用spring創建這個bean,並且通過向web.xml添加監聽器都沒有工作。

這裏是我的代碼

public class KPTomcatListener implements LifecycleListener { 

    private static final Logger LOG= LoggerFactory.getLogger(KPTomcatListener .class); 
    /** 
    * All the events of tomcat 
    * AFTER_START_EVENT, 
    * AFTER_STOP_EVENT, 
    * BEFORE_START_EVENT, 
    * BEFORE_STOP_EVENT, 
    * DESTROY_EVENT, 
    * INIT_EVENT, 
    * PERIODIC_EVENT, 
    * START_EVENT, 
    * STOP_EVENT 
    */ 
    private static int counter; 

    @Override 
    public void lifecycleEvent(LifecycleEvent arg0) { 
     String event = arg0.getType(); 
     LOG..debug("Tomcat Envents: "+ (++counter) + " :: "+ event); 
     if(event.equals("AFTER_START_EVENT")){ 
      LOG..debug("Hey I've started"); 
     } 

    } 

} 
+1

可能的重複[Java EE企業應用程序:對部署/啓動執行一些操作](http://stackoverflow.com/questions/6120831/java-ee-enterprise-application-perform-some-action-on-deploy -startup)你可以使用WebContextListener來給你確切的東西 –

+0

@JigarJoshi一個'ServletContextListener'在任何'Filter'或'Servlet'實例被初始化之前運行。我認爲OP需要整個Web應用程序。 –

+0

@Sot我不認爲OP想要初始化所有的servlet和過濾器,認爲有些url模式只在某些情況下才會被命中(例如,用戶是admin並登錄)那個特定的servlet將如何(如果已配置)將被加載,而不會試圖敲那個URL –

回答

7

所有主要的Tomcat組件的實現org.apache.catalina.Lifecycle,其中包括增加一個org.apache.catalina.LifecycleListener的能力。這聽起來像你想要HostAFTER_START_EVENT

您配置監聽器在server.xml中是這樣的:

<Host ... > 
    <Listener className="your.package.KPTomcatListener"/> 
    <!-- Other nested elements go here --> 
</Host> 

類必須在JAR並放置在Tomcat的lib目錄下的JAR包裝。

+0

感謝您的輸入讓我試試 –

+0

您可以讓我知道如何掛鉤嗎?請讓我知道Tomcat組件? –

+0

回答編輯,以添加該信息 –