package com.ruoyi.inspectiontask.service.impl; 
 | 
  
 | 
import org.quartz.spi.TriggerFiredBundle; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.beans.factory.config.AutowireCapableBeanFactory; 
 | 
import org.springframework.context.ApplicationContext; 
 | 
import org.springframework.context.ApplicationContextAware; 
 | 
import org.springframework.context.annotation.Bean; 
 | 
import org.springframework.context.annotation.Configuration; 
 | 
import org.springframework.scheduling.quartz.SchedulerFactoryBean; 
 | 
import org.springframework.scheduling.quartz.SpringBeanJobFactory; 
 | 
  
 | 
@Configuration 
 | 
public class QuartzConfig { 
 | 
    @Autowired 
 | 
    private ApplicationContext applicationContext; 
 | 
  
 | 
    @Bean 
 | 
    public SchedulerFactoryBean schedulerFactoryBean() { 
 | 
        SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean(); 
 | 
  
 | 
        // 配置SpringBeanJobFactory,用于支持Job中的依赖注入 
 | 
        AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory(); 
 | 
        jobFactory.setApplicationContext(applicationContext); 
 | 
        schedulerFactory.setJobFactory(jobFactory); 
 | 
  
 | 
        // 其他配置... 
 | 
        return schedulerFactory; 
 | 
    } 
 | 
  
 | 
    // 自定义JobFactory,支持自动注入 
 | 
    public static class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory 
 | 
            implements ApplicationContextAware { 
 | 
  
 | 
        private transient AutowireCapableBeanFactory beanFactory; 
 | 
  
 | 
        @Override 
 | 
        public void setApplicationContext(ApplicationContext applicationContext) { 
 | 
            this.beanFactory = applicationContext.getAutowireCapableBeanFactory(); 
 | 
        } 
 | 
  
 | 
        @Override 
 | 
        protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { 
 | 
            Object jobInstance = super.createJobInstance(bundle); 
 | 
            // 将Job实例交给Spring容器管理,使其能够进行依赖注入 
 | 
            beanFactory.autowireBean(jobInstance); 
 | 
            return jobInstance; 
 | 
        } 
 | 
    } 
 | 
} 
 |