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

新手上路,请多包涵

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

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

 <task:annotation-driven />

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

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

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

原文由 froi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 637
2 个回答

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

 @Configuration
@EnableScheduling
public class SpringConfiguration {

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

当需要更多控制时, @Configuration 类可以实现 SchedulingConfigurer

原文由 G. Demecki 发布,翻译遵循 CC BY-SA 3.0 许可协议

有关调度的文档 说:

如果不提供 pool-size 属性,默认的线程池将只有一个线程。

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

原文由 JB Nizet 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题