Java ScheduledExecutorService在servlet初始化后停止了一段时间

时间:2016-04-30 05:06:50

标签: java servlets scheduled-tasks

一个函数在我的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的{​​{1}}方法中,最初会在下面记录一条消息:

run

如果我错了,请纠正我:无论@Override public void run() { LOGGER.info("Now begin a new round of refreshing deployment data..."); this.doWorkFlow(); } 方法中是否有任何未处理的异常,该消息应始终每5分钟记录一次。但事实是这个调度程序运行良好一段时间后突然停止工作,甚至消息也被停止记录。任何可能的解释?我怎么能处理这种情况,因为我想确保这个调度程序服务始终在运行。或者有没有办法调试这个问题?

我假设以下代码将确保即使doWorkFlow中发生异常,Scheduler也永远不会停止执行。

doworkFlow

1 个答案:

答案 0 :(得分:2)

  

如果我错了,请纠正我:无论doWorkFlow方法中是否有任何未处理的异常,该消息应始终每5分钟记录一次

不,因为the javadoc明确说:

  

如果任务的任何执行遇到异常,则后续执行被禁止