在使用ScheduleFuture实现定时任务中,因为可能存在多个定时任务同一时段运行的情况。所以在此使用了多线程,但在使用@Autowired注解注入Bean的时候一直报空指针,后面查阅了一些文章后发现是因为,多线程每次运行都不在spring容器中,而后则使用了手动获取的方式,手动获取需要实现ApplicationContextAware接口,代码如下
@Component
public class BeanContext implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
BeanContext.applicationContext = applicationContext;
}
private static ApplicationContext applicationContext;
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
}
这里的@Component可加可不加,因为这个是一个工具类,我这是为了方便别的代码里要用的时候方便注入的。
这个工具类写好后在需要注入的时候BeanContext.getApplicationContext().getBean(SseScheduleMonitorService.class);即可