首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring @Scheduler重叠

Spring @Scheduler重叠
EN

Stack Overflow用户
提问于 2017-07-14 22:03:11
回答 1查看 970关注 0票数 0

我有两种使用spring scheduler定期运行的方法,一种是@Scheduled(fixedRate=300000) -每5分钟一次,另一种是@Scheduled(cron="0 0 0 2** ?) -每天凌晨2点我们不使用线程池的taskScheduler,所以它只使用一个线程,所以没有重叠。

我观察到的是,当5分钟的作业花费更多的时间(比如> 30分钟)时,就不允许其他@Scheduled作业运行。假设我的5分钟任务在凌晨1点45分开始,它花了45分钟来处理,其他本应该在凌晨2点启动的cron无法启动,因为线程在5分钟的任务中很忙。是否有任何设置,其他凌晨2点作业将开始尽快释放线程。帮助我们理解线程在这种情况下的行为。

EN

回答 1

Stack Overflow用户

发布于 2017-10-30 15:07:45

默认情况下,Spring调度器为作业执行提供单线程。您可以将任务执行器配置为具有多个线程和一个队列,以便即使所有线程都很忙,作业也会添加到队列中,并在线程空闲时立即被接收。

下面的示例创建一个简单的ScheduledThreadPool。

代码语言:javascript
复制
@EnableScheduling
@Configuration
public class Configuration implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar 
     scheduledTaskRegistrar) {
        scheduledTaskRegistrar.setScheduler(taskExecutor());
    }

    @Bean(destroyMethod="shutdown")
    public Executor taskExecutor() {
        return Executors.newScheduledThreadPool(5);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45104929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档