【问题标题】:Shutdown a @Scheduled task in Spring在 Spring 中关闭 @Scheduled 任务
【发布时间】:2017-01-12 16:55:29
【问题描述】:

我处于以下情况:一个 ThreadPoolScheduler 和两个用 @Scheduled 注释的方法。

@Bean
public ThreadPoolTaskScheduler serviceRegistryTaskScheduler() {
    final ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
    threadPoolTaskScheduler.setPoolSize( 2 );
    return threadPoolTaskScheduler;
}

@Scheduled( initialDelay = 3000, fixedDelay = 3000 )
public void methodOne() {
    // do this
}

@Scheduled( initialDelay = 3000, fixedDelay = 3000 )
public void methodTwo() {
    // do that
}

我基本上想停止两个@Scheduled 方法之一。有办法吗?

【问题讨论】:

标签: java spring spring-boot


【解决方案1】:

很少有@Scheduled 任务的生命周期与它们所在的应用程序上下文不同,所以我认为没有办法可以阻止它们,除非你深入了解 TaskScheduler 内部.

但是,您可以将 bean 放入它们自己的小 spring 上下文中,并将当前应用程序上下文作为父上下文。这样您就可以在需要时启动和停止子上下文。

另一个稍微脏一点的变体是有一个单独的上下文,但是将@Scheduled 方法放入@Component,然后在您想停止调度时调用context.getBeanFactory().destroyBean(component);。如果您需要重新启动它,您将需要重新创建和注册该组件 - 因此不如第一个解决方案那么漂亮。

【讨论】:

    猜你喜欢
    • 2016-08-21
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2014-09-08
    相关资源
    最近更新 更多