gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:39:54 25 4
gpt4 key购买 nike

在我的 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 分钟记录一次。但事实是这个调度程序运行良好一段时间后突然停止工作,甚至消息也停止记录。有什么可能的解释吗?我该如何处理这种情况,因为我想确保此调度程序服务始终运行。或者有什么办法可以调试这个问题吗?

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

@Override
public void run() {
try{
LOGGER.info("Now begin a new round of refreshing deployment data...");
this.doWorkFlow();
}catch(Exception e){
return;
}

}

最佳答案

Correct me if I am wrong: no matter whether there is any exception unhandled in the doWorkFlow method, that message should always be logged every 5 minutes

不,因为 the javadoc明确表示:

If any execution of the task encounters an exception, subsequent executions are suppressed

关于Java ScheduledExecutorService 在 servlet 初始化后停止一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36950992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com