gpt4 book ai didi

java - 如何防止服务在 Catalina 启动后才启动

转载 作者:行者123 更新时间:2023-11-28 22:15:29 25 4
gpt4 key购买 nike

我有一个在 Apache Tomcat 9 上运行的 JAX-WS 客户端。客户端通过进入无限循环来轮询数据,并设置为 servlet 以在启动时加载。我遇到的问题是 servlet 在 Catalina 完成启动之前启动并进入循环。

我试过使用 sleep() 和 wait() 无济于事,我试过实现 org.apache.catalina.LifecycleListener 但这也没有用。

这是我的 servlet 类:

@WebServlet("/MyClient")
public class MyServlet extends HttpServlet {

@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

@Override
public void init() throws ServletException {
System.out.println("Servlet Started");
MyClient client = new MyClient();
client.startClient();

}
}

这是我的投票类:

public class Polling {

private static final int TWO_MINUTES = 120000;

public void startPoll() throws IOException {
for (;;) {
//Do something
try {
Thread.sleep(TWO_MINUTES);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

}

我希望在我的程序打印“Servlet Started”之前在 XXXX 毫秒内看到 org.apache.catalina.startup.Catalina.start 服务器启动,但是它首先启动 servlet,这使得 tomcat 挂起并阻止访问其他 Web 应用程序.

最佳答案

您不会看到服务器启动,因为您劫持了初始化线程并开始使用它进行轮询。服务器将在您的 servlet 初始化后启动,但它从未完成初始化,因为您在 init() 中调用了 startPoll() 并且它永远不会返回。

与其使用无限循环和手动 2 分钟 sleep 的手工轮询,不如查看调度,例如使用 Quartz或至少一个 ScheduledExecutorService , 这是一个 Tomcat based example .

关于java - 如何防止服务在 Catalina 启动后才启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57987260/

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