所以,我有一个使用 @Scheduled 注释来完成各种工作的 Spring 应用程序。在产品中,它工作得很好。然而,这个特性在运行 spock 集成测试时给我们带来了一些问题——一旦容器启动,我们所有的任务都会被触发,它会破坏我们的测试运行。
我正在寻找一种关闭调度功能的方法,但仍然让容器(使用@ComponentScan 配置)将其作为常规的 'ol bean 来选择。
根据我到目前为止所做的一些工作,似乎如果我可以用无操作实现覆盖内置的 ScheduledAnnotationBeanPostProcessor 我可以实现这个目标..但是当我在容器中创建这个 bean 时(使用 @ Bean("scheduledAnnotationBeanPostProcessor"-参见下面的代码部分),它似乎只是添加到 BeanPostProcessors 列表中-它仍然包含原始实现。
@Bean(name="scheduledAnnotationBeanPostProcessor")
ScheduledAnnotationBeanPostProcessor scheduledAnnotationBeanPostProcessor(){
return new ScheduledAnnotationBeanPostProcessor(){
@Override
public Object postProcessAfterInitialization(final Object bean, String beanName){
return bean
}
}
}
所以,我想我的问题是——如何连接一个将替换内置 BeanPostProcessor 的 bean?仅供参考,我使用的是 Spring 3.2.4,并且该应用程序是通过 Spring 注释 100% 配置的。
谢谢。