package com.ruoyi.inspectiontask.service.impl;
|
|
import org.quartz.JobDataMap;
|
import org.quartz.Scheduler;
|
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.core.io.ClassPathResource;
|
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
|
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
|
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
|
|
import javax.sql.DataSource;
|
|
@Configuration
|
public class QuartzConfig {
|
@Autowired
|
private ApplicationContext applicationContext;
|
|
// 假设已配置名为dataSource的数据源Bean
|
@Autowired
|
private DataSource dataSource;
|
|
@Bean
|
public JobDetailFactoryBean jobDetail() {
|
JobDetailFactoryBean factory = new JobDetailFactoryBean();
|
factory.setJobClass(TimingTaskJob.class); // 你的自定义 Job 类(需实现 Job 接口)
|
|
// 1. 核心:设置为持久化任务(必须,否则不写入 qrtz_job_details 或重启清理)
|
factory.setDurability(true);
|
|
// 2. 可选:任务执行崩溃后,重启时是否恢复执行(建议开启)
|
factory.setRequestsRecovery(true);
|
|
// // 3. 可选:设置 JobDataMap(若需传递参数,参数需可序列化)
|
// JobDataMap jobDataMap = new JobDataMap();
|
// jobDataMap.put("key", "value"); // 示例参数(若参数是自定义对象,需实现 Serializable)
|
// factory.setJobDataMap(jobDataMap);
|
|
return factory;
|
}
|
|
@Bean
|
public SchedulerFactoryBean schedulerFactoryBean() {
|
SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
|
|
// 配置SpringBeanJobFactory,用于支持Job中的依赖注入
|
AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
|
jobFactory.setApplicationContext(applicationContext);
|
schedulerFactory.setJobFactory(jobFactory);
|
|
// 在schedulerFactoryBean()方法中添加
|
schedulerFactory.setDataSource(dataSource);
|
// 其他配置...
|
return schedulerFactory;
|
}
|
|
@Bean
|
public Scheduler scheduler() {
|
return schedulerFactoryBean().getScheduler();
|
}
|
|
// 自定义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;
|
}
|
}
|
}
|