我处于以下情况:一个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任务的生命周期与它们所驻留的Application上下文的生命周期不同,这是非常罕见的,因此,我认为除非您深入研究TaskScheduler的内部结构,否则您无法停止它们。
但是,您可以将bean放入它们自己的小spring上下文中,并将当前应用程序上下文作为父上下文。这样,您可以在需要时启动和停止子上下文。
另一个稍微脏一点的变化是具有单个上下文,但是将@Scheduled方法放入@Component,然后在要停止调度时调用context.getBeanFactory().destroyBean(component);
。如果您需要重新启动它,则需要重新创建并注册该组件-使其不像第一个解决方案那么漂亮。
关于java - 在 Spring 关闭@Scheduled任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41618816/