gpt4 book ai didi

java - 在 Spring 中关闭 @Scheduled 任务

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:59 25 4
gpt4 key购买 nike

我处于以下情况:一个 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 方法之一。有办法做到吗?

最佳答案

@Scheduled 任务的生命周期与其所在的应用程序上下文不同的情况非常罕见,因此我认为没有办法可以停止它们,除非您深入了解 TaskScheduler 的内部结构。

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

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

关于java - 在 Spring 中关闭 @Scheduled 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41618816/

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