package com.oying.modules.quartz.config; import lombok.extern.slf4j.Slf4j; import org.quartz.spi.TriggerFiredBundle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.lang.NonNull; import org.springframework.scheduling.quartz.AdaptableJobFactory; import org.springframework.stereotype.Component; /** * 定时任务配置 * @author Z * @date 2019-01-07 */ @Slf4j @Configuration @Scope("singleton") public class QuartzConfig { /** * 解决Job中注入Spring Bean为null的问题 */ @Component("quartzJobFactory") public static class QuartzJobFactory extends AdaptableJobFactory { private final AutowireCapableBeanFactory capableBeanFactory; @Autowired public QuartzJobFactory(AutowireCapableBeanFactory capableBeanFactory) { this.capableBeanFactory = capableBeanFactory; } @NonNull @Override protected Object createJobInstance(@NonNull TriggerFiredBundle bundle) throws Exception { try { // 调用父类的方法,把Job注入到spring中 Object jobInstance = super.createJobInstance(bundle); capableBeanFactory.autowireBean(jobInstance); log.debug("Job instance created and autowired: {}", jobInstance.getClass().getName()); return jobInstance; } catch (Exception e) { log.error("Error creating job instance for bundle: {}", bundle, e); throw e; } } } }