使用以下代码在 JAR 中添加一个类:
public class TomcatStartupListener implements org.apache.catalina.LifecycleListener {
public void lifecycleEvent(org.apache.catalina.LifecycleEvent event) {
if (event.getType().equals("after_start")) {
// call your main method here
}
}
}
注意:为了编译它,你需要添加<tomcat-dir>/lib/catalina.jar
到你的类路径中。否则在编译时将无法找到必要的接口(org.apache.catalina.LifecycleListener
和org.apache.catalina.LifecycleEvent
)。完成编译后,像往常一样将 JAR 放在<tomcat-dir>/lib
.
现在打开<tomcat-dir>/conf/server.xml
并在该部分下添加以下<Server>
内容:
<Listener className="com.yourpackage.TomcatStartupListener" />
现在,每当您的 Tomcat 服务器启动时,TomcatStartupListener
您的 JAR 中的这个类就会被调用,并且您可以调用您的 main 方法。还有很多其他的事件类型!您可以使用以下任何事件类型:
- before_init
- after_init
- before_start
- 配置启动
- 开始
- after_start
- before_stop
- 停止
- 配置停止
- after_stop
- before_destroy
- after_destroy
由于类加载器在 Tomcat(甚至大多数 JVM)中的工作方式,这种方法是必要的。以下是该链接的要点:
There are three aspects of a class loader behavior
Lazy Loading
Class Caching
Separate Namespaces
如果不加选择地加载所有 JAR 中的所有类,JVM 将变得非常沉重。因此,共享 JAR 中的类仅按需加载。您调用 main 方法的唯一方法是添加上述生命周期侦听器。