spring @Scheduled 带注释的方法是否在不同的线程上运行?

2022-08-31 10:49:18

我有几种方法用注释。@Scheduled(fixedDelay=10000)

在应用程序上下文中,我有这个注释驱动的设置:

<task:annotation-driven />

问题是,有时某些方法执行会延迟几秒钟甚至几分钟。

我假设即使一个方法需要一段时间才能完成执行,其他方法仍然会执行。所以我不明白延迟。

有没有办法减少甚至消除延迟?


答案 1

为了完整起见,下面的代码显示了使用java配置调度程序的最简单方法:

@Configuration
@EnableScheduling
public class SpringConfiguration {

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

当需要更多控制时,类可以实现 。@ConfigurationSchedulingConfigurer


答案 2

关于调度的文档说:

如果未提供池大小属性,则缺省线程池将只有一个线程。

因此,如果您有许多计划任务,则应按照文档中的说明配置计划程序,以拥有一个包含更多线程的池,以确保一个长任务不会延迟所有其他任务。


推荐