[英]Spring schedule graceful shutdown not working when using a cron scheduled
我有一个小型独立应用程序,可以将调度程序配置为正常终止。 使用以下配置:
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setWaitForTasksToCompleteOnShutdown(true);
scheduler.setAwaitTerminationSeconds(60);
return scheduler;
}
我可以让它优雅地终止调度程序,但前提是我没有任何@Scheduled(cron =)任务。 一旦我拥有其中之一,无论调度程序在超时之前会被卡住。 我已经尝试使用执行程序配置它并手动执行shutdown / await,效果完全相同。
这些cron作业甚至没有运行。 例如,它们被设置为在夜间的固定时间运行。
春季版:4.2.8.RELEASE
超时到达结束时会发生这种情况:
2017.07.28 01:44:56 [Thread-3] WARN Timed out while waiting for executor 'taskScheduler' to terminate
有什么想法吗?
那个版本的Spring可能存在错误? 请参阅jira.spring.io/browse/SPR-15067
因为默认情况下,ScheduledThreadPoolExecutor将等待所有延迟的计划任务完成执行,即使计划任务当时没有运行。
试试这个:
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler() {
private static final long serialVersionUID = -1L;
@Override
public void destroy() {
this.getScheduledThreadPoolExecutor().setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
super.destroy();
}
};
scheduler.setWaitForTasksToCompleteOnShutdown(true);
scheduler.setAwaitTerminationSeconds(60);
return scheduler;
}
然后,ScheduledThreadPoolExecutor将只等待当前正在运行的计划任务完成执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.