【发布时间】:2016-08-25 08:41:07
【问题描述】:
在我的Tomcat 服务器中实现了一个功能:基本上ScheduledExecutorService 将设置为在HttpServlet 初始化时定期运行任务。代码如下:
@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 之后添加日志记录以检查
标签: java servlets scheduled-tasks