gpt4 book ai didi

java - 长时间运行的 Spring 计划任务

转载 作者:行者123 更新时间:2023-11-30 05:51:29 25 4
gpt4 key购买 nike

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

最佳答案

在Spring框架中,一个定时任务只能由一个线程执行,如果执行时间长于间隔时间,任务就会被延迟。下面是一个简单的例子:

@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中,所有任务都会在线程上执行(默认),为了 reduce task 之间的干扰,我们可以支持一个线程池来执行计划任务,如下所示:

@Bean
public ThreadPoolTaskScheduler taskExecutor() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(20);
return scheduler;
}

关于spring定时任务的其他问题:Does spring @Scheduled annotated methods runs on different threads?

关于java - 长时间运行的 Spring 计划任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53834006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com