【发布时间】:2015-12-29 18:32:35
【问题描述】:
我使用this 代码在 Tomcat 初始化之前启动了一个监听器,但它有一个 while 循环,它将每 5 秒检查一次数据库是否有更改。有什么方法可以跳过循环部分,直到我的 Web 服务完全启动,然后触发循环开始检查?
编辑:意思是listener,而不是Servlet
EDIT2:下面的代码
public class DatabaseChecker implements ServletContextListener {
final static String URL = "redacted";
final static String USER = "redacted";
final static String PASS = "redacted";
@Override
public void contextInitialized(ServletContextEvent event) {
Vector<String> completedJobs = new Vector<String>();
try {
while(true) { // loop to always check & notify
Thread.sleep(5000);
System.out.println("Checker running ...");
// completedJobs = selectCompletedJobs();
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("ServletContextListener destroyed");
}
}
【问题讨论】:
-
那是错误的。 while 循环将阻止上下文侦听器完成,因此您的应用程序可能会保持未初始化状态。 sleep-busy while 循环可能应该在单独的后台线程中发生。像这样:stackoverflow.com/questions/4691132/…
-
@Gimby 成功了!!!想要回答这个问题,以便我可以给你打勾吗? ;)
-
另一个问题+答案完全回答了您的问题这一事实使您的问题重复。因此,BalusC 正确地完成了文书工作。
标签: java tomcat jakarta-ee listener