Java 如何防止在Catalina启动之前启动服务

Java 如何防止在Catalina启动之前启动服务,java,tomcat,catalina,Java,Tomcat,Catalina,我有一个在ApacheTomcat9上运行的JAX-WS客户机。客户机通过进入无限循环来轮询数据,并设置为servlet以在启动时加载。我遇到的问题是,servlet在Catalina完成启动之前启动并进入循环 我尝试过使用sleep()和wait()但都没有用,我尝试过实现org.apache.catalina.LifecycleListener,但这也不起作用 下面是我的servlet类: @WebServlet(“/MyClient”) 公共类MyServlet扩展了HttpServle

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

我尝试过使用sleep()和wait()但都没有用,我尝试过实现org.apache.catalina.LifecycleListener,但这也不起作用

下面是我的servlet类:

@WebServlet(“/MyClient”)
公共类MyServlet扩展了HttpServlet{
@凌驾
public void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
}
@凌驾
public void init()引发ServletException{
System.out.println(“Servlet启动”);
MyClient=新的MyClient();
client.startClient();
}
}
这是我的投票课:

公共类轮询{
私人静态最终整数两分钟=120000;
public void startPoll()引发IOException{
对于(;;){
//做点什么
试一试{
睡眠(两分钟);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}
}

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

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


不要使用无限循环和手动2分钟睡眠的手工轮询,而是查看调度,例如使用或至少使用a,这里是a。

换句话说,不要劫持init线程。您的轮询类使其实现可运行。然后将该实例交给另一个线程执行