本文最后更新于110 天前,其中的信息可能已经过时。
SpringBoot 定时任务报错 Unexpected error occurred in scheduled task
报错原因:
因为使用@Scheduled 注解时,是高于spring 注入Bean的注解的 比如
@Resource,@Autowired 在我们调用注入进来的Bean的方法时会有 可能定时任务已经开始了,但是需要的Bean还没被注入的情况所以报错了。
解决办法
把这个使用自动任务的类实现 ApplicationContextAware接口,重写接口中的方法setApplicationContext,使用一个ApplicationContext 接收其中 applicationContext,相当于主动去获取容器。
@Component @Slf4j public class Task implements ApplicationContextAware {、 private static ApplicationContext context; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } }