此篇文章为排查和直接解决问题,想要查看详细的原理请查看:Spring Boot - 切面对Quartz定时任务Job失效的问题解决(原理篇)
失效原因:
quartz的job是没有被Spring容器管理,Job实例是quartz进行管理的,所以AOP并不能对job进行操作。需要将job实例放进spring容器进行管理,使得aop可以对job实例进行操作。
切面:
1.切面类是否添加@Component
2.被切方法是否public或protected修饰
3.@Pointcut里边路径是否准确
Quartz配置类
@Bean
public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setQuartzProperties(properties());
// 将JobFactory和schedulerFactoryBean相关联,将job放入到spring容器中,使得切面生效
schedulerFactoryBean.setJobFactory(new SpringBeanJobFactory());
return schedulerFactoryBean;
}
schedulerFactoryBean.setJobFactory(new SpringBeanJobFactory());这句话是吧所有的job实例放进spring容器中,这样的话就可以被切面切到。使得切面生效。