在Tomcat服务器启动完成后,Spring或Tomcat中是否有任何机制,生命周期事件或回调通知? (我已经配置了8个Web应用程序和队列。一旦启动所有应用程序,我宁愿将通知返回给每个应用程序。)我知道Spring有应用程序监听器,可以在初始化Web应用程序后使用。但我不能在我的情况下使用它,因为我希望在初始化所有Web应用程序后收到通知。
****** 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");
}
}
}
所有主要的Tomcat组件都实现了org.apache.catalina.Lifecycle
,其中包括添加org.apache.catalina.LifecycleListener
的能力。听起来你想要AFTER_START_EVENT
的Host
。
您可以在server.xml中配置侦听器,如下所示:
<Host ... >
<Listener className="your.package.KPTomcatListener"/>
<!-- Other nested elements go here -->
</Host>
该类必须打包在JAR中,JAR放在Tomcat的lib目录中。
如果有人想以编程方式执行此操作(例如,如果使用嵌入式Tomcat):
Tomcat tomcat = new Tomcat();
...
tomcat.getServer().addLifecycleListener(new KPTomcatListener());
tomcat.start()