当前位置: 首页 > 知识库问答 >
问题:

spring@调度程序重叠

古畅
2023-03-14

我有两个方法可以与spring调度器定期运行,一个是@schedule(fixedrate=300000)--每5分钟运行一次,另一个是@schedule(cron=“0 0 0 2**?)--每天凌晨2点运行。我们没有使用线程池的taskScheduler,所以它只使用一个线程,所以没有重叠。

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

共有1个答案

葛景龙
2023-03-14

默认情况下,spring调度程序为作业执行提供了一个线程。您可以将一个任务执行器配置为一个以上的线程和一个队列,这样即使所有线程都很忙,也会将作业添加到队列中,并在一个线程空闲时立即获取。

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

@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);
    }
}
 类似资料:
  • 乡亲们, 我正在尝试用Quartz调度器实现Spring boot,以便在java中调度作业。我的经理建议根据作业id为所有作业使用具有不同实施服务的单个作业。但我不能说服所有服务实施都使用单个作业。 请指导我使用多个服务类的单个作业或为每个服务编写每个作业。 提前感谢。。

  • 我有两个要求。 每周一触发作业 对于第一个要求,我尝试了和。他们俩都不工作。该函数未被调用。 对于第二个要求,我尝试了和。我得到下面的错误。 原因:java。lang.IllegalStateException:遇到无效的@Scheduled方法“monthlyData”:用于输入字符串:“2#1”。

  • 我正在做一个项目,我们计划使用WLP (WebSphere liberty)代替传统的WAS。 代码使用 WAS 调度程序来调度活动。 liberty 是否也具有与 WAS 中存在的相同级别的调度程序支持/功能? 如何将调度程序任务从webphere迁移到自由?

  • 我们在Tomcat 6上有一个Spring 3 Web应用程序,它通过(主要用于每天晚上运行的作业)使用了几个计划服务。现在看来,有时(很少,也许是两个月左右一次)调度程序线程会停止工作,因此在接下来的晚上不会执行任何作业。在我们的日志文件中没有异常或日志条目。 有人知道为什么会发生这种情况吗?或者如何获得关于这个问题的更多信息? 有没有办法在应用程序中检测到这种情况并重新启动调度程序? 目前,我

  • 相关: 我觉得我错过了什么?

  • 我的问题是,在优雅地关闭应用程序之前,Spring会足够聪明地完成一个飞行中的任务吗?如果飞行中的任务在关机前完成,那么Spring会不会聪明到不启动另一个任务呢? 谢谢你。