Java 长时间运行的spring计划任务
我在context.xml文件中定义了一个Spring计划任务,它每分钟运行一次。 该任务调用postgres存储过程。 存储过程运行时间可能持续一分钟以上。 如果当前运行没有完成,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
谢谢,在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;
}
关于春季计划任务的其他问题: