2014-03-13 133 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

回答编辑,以添加该信息 –