Java 长时间运行的spring计划任务

Java 长时间运行的spring计划任务,java,spring,scheduled-tasks,Java,Spring,Scheduled Tasks,我在context.xml文件中定义了一个Spring计划任务,它每分钟运行一次。 该任务调用postgres存储过程。 存储过程运行时间可能持续一分钟以上。 如果当前运行没有完成,spring框架会调用相同的调度程序吗? 谢谢,在spring framework中,一个调度任务只能由一个线程执行,如果执行时间超过间隔时间,任务将被延迟。下面是一个简单的示例: @Scheduled(cron = "0/3 * * * * *") public void work() { log.info

我在context.xml文件中定义了一个Spring计划任务,它每分钟运行一次。 该任务调用postgres存储过程。 存储过程运行时间可能持续一分钟以上。 如果当前运行没有完成,spring框架会调用相同的调度程序吗?
谢谢,

在spring framework中,一个调度任务只能由一个线程执行,如果执行时间超过间隔时间,任务将被延迟。下面是一个简单的示例:

@Scheduled(cron = "0/3 * * * * *")
public void work() {
    log.info("begin to do some work,current thread is {}", Thread.currentThread().getName());
    try {
        TimeUnit.SECONDS.sleep(5);
    } catch (InterruptedException e) {
        log.error(e.toString());
    }
}
我创建了一个计划任务,预期的执行顺序是:0 3 6 9…,但该任务需要更多的时间,因此执行顺序是:0 6 12 18

在spring中,所有任务都将由on thread(默认)执行,为了减少任务之间的干扰,我们可以支持一个线程池来执行以下shceduled任务:

@Bean
public ThreadPoolTaskScheduler taskExecutor() {
    ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
    scheduler.setPoolSize(20);
    return scheduler;
}
关于春季计划任务的其他问题: