Tomcat servlet 应用程序的后台线程

2022-08-31 16:08:49

我对Tomcat不是很熟悉,在我看来,它基本上被抽象为一个cgi服务器,可以在调用之间保存JVM - 我知道它可以做的远不止于此。

我正在寻找一种在Tomcat服务器启动时启动后台线程的方法,这将定期更新服务器上下文(在我的特定情况下,这是一个从其他一些服务监听检测信号并更新可用性信息的线程,但可以想象它的各种用途)。

有没有一种标准的方法来做到这一点?上下文的启动和更新/查询?

任何指向相关文档和/或代码示例的指针将不胜感激。


答案 1

如果要在部署 WAR 时启动线程,可以在 Web 中定义上下文侦听器.xml:

<web-app>
    <listener>
       <listener-class>com.mypackage.MyServletContextListener</listener-class>
    </listener>
</web-app>

然后实现该类,如下所示:

public class MyServletContextListener implements ServletContextListener {

    private MyThreadClass myThread = null;

    public void contextInitialized(ServletContextEvent sce) {
        if ((myThread == null) || (!myThread.isAlive())) {
            myThread = new MyThreadClass();
            myThread.start();
        }
    }

    public void contextDestroyed(ServletContextEvent sce){
        try {
            myThread.doShutdown();
            myThread.interrupt();
        } catch (Exception ex) {
        }
    }
}

答案 2

我正在寻找一种在Tomcat服务器启动时启动后台线程的方法

我认为您正在寻找一种方法,以便在Tomcat启动Web应用程序时启动后台线程。

这可以使用 ServletContextListener 来完成。它在 Web 中注册.xml,并将在应用启动或停止时调用。然后,您可以使用普通的 Java 方法来创建线程(或执行服务),从而创建(并在以后停止)线程。