gpt4 book ai didi

java - 如何使用tomcat将一个类设置为守护进程?

转载 作者:行者123 更新时间:2023-11-28 22:07:08 24 4
gpt4 key购买 nike

我是 java 世界的新手,也是 tomcat 世界的新手。所以,问题是:

我需要将 java 类作为守护进程运行。此类应该能够与 tomcat 请求通信。

过去:当我在 C 中执行此操作时,我将二进制文件作为后台进程执行。

你能给我一些如何进行的建议吗?

提前致谢!

最佳答案

所以听起来答案分为两部分。第一个是确保您的守护进程与 tomcat 容器一起启动,另一个是确保您的线程得到正确配置,以免 tomcat 实例在关闭后保持 Activity 状态。

由于关于线程的部分比较简单,所以我先把它排除在外。您生成的所有线程都应该是守护线程(例如,您调用了 Thread.setDaemon(true) )。引自 O'reilly's Exploring Java's Chapter on Threads :

In many cases, what we really want is to create background threads that do simple, periodic tasks in an application. The setDaemon() method can be used to mark a Thread as a daemon thread that should be killed and discarded when no other application threads remain. Normally, the Java interpreter continues to run until all threads have completed. But when daemon threads are the only threads still alive, the interpreter will exit.

拥有活跃的非守护线程将阻止 tomcat 的干净关闭。这样做的原因是 tomcat 保持一个非守护线程运行,直到它收到关闭消息,此时,该线程停止。如果有其他非守护线程,那么 JVM 会很高兴地继续运行,您将不得不从命令行终止进程。

现在我们开始 Hook servlet 容器的生命周期以生成我们的服务。这里有两个步骤...我们必须按照 Jim Garrison 的建议实现一个 ServletContextListener,然后我们必须告诉容器加载它。这里有两件事:

第 1 步:实现一个 ServletContextListener:

public class MyDaemonServletContextListener implements ServletContextListener {

public void contextInitialized(ServletContextEvent sce) {

Thread th = new Thread() {
public void run() {
// implement daemon logic here.
}
};
th.setDaemon(true);
th.start();
}

public void contextDestroyed(ServletContextEvent sce) {
// you could notify your thread you're shutting down if
// you need it to clean up after itself
}
}

第 2 步:在您的 web.xml 中声明它:

<listener>
<listener-class>MyDaemonServletContextListener</listener-class>
</listener>

应该就是这样。

关于java - 如何使用tomcat将一个类设置为守护进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6838426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com