运行 在 tomcat 服务器启动后自动从 war 应用程序中获取方法

Run method from war application automatically after tomcat server startup

项目是 war 使用本地 tomcat

我想知道如何在服务器启动后自动运行一个方法?我知道在服务器启动期间 运行 它的方法,例如 @Bean 方法或在上下文初始化期间,但是在服务器成功启动后我该如何做?

据我了解,您正在使用 Spring。因此,您可以查看 Spring 应用程序上下文事件。 例如,您可以像这样定义事件侦听器方法

@EventListener
public void handleContextRefreshEvent(ContextStartedEvent ctxStartEvt) {
    System.out.println("Context Start Event received.");
}

在 Tomcat 上,您可以使用 Tomcat-自己的 LifecycleListener。如果您在主机组件上为 AFTER_START_EVENT 注册一个侦听器,您应该得到您想要的。

LifecycleListener 的代码示例:

package my.sourcecode;

import org.apache.catalina.Lifecycle;
import org.apache.catalina.LifecycleEvent;
import org.apache.catalina.LifecycleListener;

public class TomcatHostLifecycleListener implements LifecycleListener {

@Override
public void lifecycleEvent(LifecycleEvent lifeCE) {

    if (Lifecycle.AFTER_START_EVENT.equals(lifeCE.getType())) {
        System.out.println("************ TomcatHostLifecycleListener: After Start Event");
    }

}

}

代码必须作为 JAR 文件放在 Tomcat 的全局 lib 文件夹中!

LifecycleListener 必须在 Tomcats server.xml 中注册,在您的例子中是在主机元素内,因为我们想监听主机启动:

....
<Host ... >
    <Listener className="my.sourcecode.TomcatHostLifecycleListener"/>
    ....

有关更多文档,请参阅 Lifecycle-Doc

(使用 Tomcat 8.5.30 和 Java 11 测试)

使用 Spring Boot,将 @PostConstruct 注释添加到该方法会导致它在 Spring Boot 应用程序启动后 运行。