【发布时间】:2016-10-07 12:51:20
【问题描述】:
我使用 Spring Framework 的 Scheduled 来安排我的作业使用 cron 每 5 分钟运行一次。但有时我的工作会无限等待外部资源,我不能在那里设置超时。我不能使用fixedDelay,因为以前的进程有时会进入无限等待模式,我必须每 5 分钟刷新一次数据。
所以我在 Spring Framework 的 Scheduled 中寻找任何选项,以在 fixed-time 成功或不成功运行之后停止该进程/线程。
我发现下面的设置为keepAliveTime 初始化了ThreadPoolExecutor 120 秒,我把它放在@Configuration 类中。谁能告诉我这会像我预期的那样工作。
@Bean(destroyMethod="shutdown")
public Executor taskExecutor() {
int coreThreads = 8;
int maxThreads = 20;
final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
coreThreads, maxThreads, 120L,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()
);
threadPoolExecutor.allowCoreThreadTimeOut(true);
return threadPoolExecutor;
}
【问题讨论】:
-
您的代码无法按预期工作。描述有关您的随机悬挂作业的更多详细信息。
标签: java spring spring-boot spring-scheduled