spring boot定时任务中无法使用自动注入

在被@schedule注解修饰的方法中,使用自动注入会报空指针
我的解决方案是以静态方式获取spring容器然后使用getBean()方法进行获取,是成功的,我想问为什么不能使用自动注入

阅读 6.7k
3 个回答

Spring 的 Schedule 是通过 Quartz实现的, 但默认时, 并不直接支持 ApplicationContext, 可以通过下面的方式配置

@Bean
public SpringBeanJobFactory springBeanJobFactory() {
    AutoWiringSpringBeanJobFactory jobFactory = new AutoWiringSpringBeanJobFactory();
    jobFactory.setApplicationContext(applicationContext);
    return jobFactory;
}

在该方法所在的类中使用@Autowired静态注入所需要的依赖,然后在该类上加@Component注解,格式类似如下:

@Component
@EnableScheduling
//@EnableScheduling注解可以位于其它类上,但是必须有
public class ScheduleTasks{

    @Autowired
    private SomeOtherClass someOtherClass;
    
    @Scheduled(...)
    public void go(){
      someOtherClass.do();
    }
}

写了@Schedule之后,写@Component了么?…

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