在我的Tomcat
服务器中实现了一项功能:基本上ScheduledExecutorService
将设置为在初始化HttpServlet
后定期运行任务。代码如下所示:Java ScheduledExecutorService在servlet初始化后停止了一段时间
@Override
public void init() throws ServletException {
HttpsTool.setupUncheckedHttps();
LOGGER.info("DeploymentInfoScheduler Initialized successfully....");
System.out.println("DeploymentInfoScheduler Initialized successfully....");
this.retrieveServiceDeploymentsInfo();
}
private void retrieveServiceDeploymentsInfo() {
final Runnable deploymentsDataHandler = new DeploymentsDataHandler();
final ScheduledFuture<?> beeperHandle = deploymentsInfoRetrieverScheduler
.scheduleAtFixedRate(deploymentsDataHandler, 0, 5, TimeUnit.MINUTES);
}
如果servlet已成功初始化,任务将永远保持每5秒运行一次。在DeploymentsDataHandler
的run
方法,消息记录像下面在开始的时候:
@Override
public void run() {
LOGGER.info("Now begin a new round of refreshing deployment data...");
this.doWorkFlow();
}
纠正我,如果我错了:不管是否有任何异常的doWorkFlow
方法未处理的,该消息应该总是每5分钟记录一次。但事实是这个调度程序运行良好一段时间,突然停止工作,甚至停止记录消息。任何可能的解释?我怎么能处理这种情况,因为我想确保这个调度程序服务始终运行。或者有什么方法可以调试这个问题?
我假设以下代码将确保Scheduler
永不停止执行,即使在doworkFlow
发生异常。
@Override
public void run() {
try{
LOGGER.info("Now begin a new round of refreshing deployment data...");
this.doWorkFlow();
}catch(Exception e){
return;
}
}
最后的doWorkFlow确定终止吗?如果不是,则不会有新的任务开始。您可以在doWorkFlow后添加日志记录来检查 –