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

如果其中一个排定程序运行时间较长,则spring boot应用程序排定程序不工作

曾昂然
2023-03-14

我在spring boot的应用程序中有调度器,如果任何一个调度器需要时间来执行进程,剩余的调度器在给定的时间或特定的时间间隔后将无法工作。

    @Component
public class ScheduledTask(){

@Scheduled(cron ="0 00 01 1/1 * ? ")
public void method1(){
//process 1 do something.

}

@Scheduled(initialDelay =5000, fixedRate=900000)
public void method2(){
//process 2 do something.

}

@Scheduled(cron ="0 10 00 1/1 * ? ")
public void method3(){
//process 3 do something.

}

@Scheduled(cron ="0 10 00 1/1 * ? ")
public void method4(){
//process 4 do something.

}

@Scheduled(initialDelay =5000, fixedRate=900000)
public void method5(){
//process 5 do something.

}


}

说明:method5和method2每15分钟运行一次。但是假设如果我的方法5需要处理的时间超过了,那么我的调度程序(方法2)在接下来的15分钟内不会启动。如果我的方法5花费了太多的时间来处理,如果method1、method3和method4 schedular的时间来了(这里如1a.m.)但是这个调度程序在那个时候仍然不会运行。

请让我知道什么做调度程序运行完美,没有任何失败。

共有1个答案

薛博艺
2023-03-14

默认情况下,spring boot上下文中的日程安排是单线程的。当您需要运行并行任务时,然后使用@Configuration类实现SchedulingConfigurer接口。这允许访问基础ScheduledTaskRegistratar实例。例如,下面的示例演示如何自定义Executor以并行执行计划任务。

@Configuration
@EnableScheduling
public class AppConfig implements SchedulingConfigurer {

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

    @Bean(destroyMethod="shutdown")
    public Executor taskExecutor() {
        return Executors.newScheduledThreadPool(100);
    }
}

请阅读:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/schedulation/enableScheduling.html

 类似资料:
  • 我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题

  • 问题内容: 我需要帮助在特定时间(如下午2点)在服务器上运行Java程序(以索引新文件)。 有人告诉我Java有一些叫做Job的东西,但我不知道该如何使用。我尝试了这个: 但是有了这个程序仍在运行。 如何在指定时间运行程序? 问题答案: 有一个名为Quartz的API ,您的程序可以在其中调度“作业”,并在该时刻运行它。 在给出示例之前,请尝试使用此链接。 编辑:首先,您必须创建一个实现org.q

  • 我正在尝试使用Apache Camel运行一个简单的重新排序程序。该程序使用Java DSL对传入的Java消息重新排序。当我运行这个程序时,消息会被写入文件夹,但根据标题值或消息正文中单个单词的字母顺序,不会出现任何特定的顺序。Camel创建的文件仍然无序,就好像DSL函数什么都没做一样。 如何让这个程序像方法那样对消息进行实际排序?此外,如何让这个程序重新排序,然后以正确的排序顺序将消息聚合到

  • 我正在开发一个GoogleApps脚本电子表格应用程序,我希望该程序具备的能力之一是根据来自两个不同列的数据自动排序一系列表单响应。所以我想按第16列中的数据排序,然后按第1列排序。我可以使用以下方法手动实现此功能:https://drive.googleblog.com/2010/06/tips-tricks-advanced-sorting-rules-in.html 目前我正在运行函数与第一

  • 例如。 这应该运行一个简单的hello world应用程序,摘自oracle文档。然而,当我‘运行’这个代码,没有窗口打开。取而代之的是打开一个名为“Java”的应用程序。看起来'java'只是一个位于'jdk1.8.0_25.jdk/contents/home/bin'中的'UNIX可执行文件‘。应用程序'java'绝对不显示任何东西,并且在没有强制退出的情况下无法关闭。 我在MacBook上运