权益使用同步逻辑调整
This commit is contained in:
@@ -4,17 +4,19 @@ import org.quartz.Scheduler;
|
|||||||
import org.quartz.SchedulerException;
|
import org.quartz.SchedulerException;
|
||||||
import org.quartz.impl.StdSchedulerFactory;
|
import org.quartz.impl.StdSchedulerFactory;
|
||||||
import org.quartz.spi.JobFactory;
|
import org.quartz.spi.JobFactory;
|
||||||
|
import org.quartz.spi.TriggerFiredBundle;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.ApplicationContextAware;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
|
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
|
||||||
|
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class QuartzConfig {
|
public class QuartzConfig {
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ApplicationContext applicationContext;
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Scheduler scheduler() throws SchedulerException {
|
public Scheduler scheduler() throws SchedulerException {
|
||||||
@@ -22,17 +24,35 @@ public class QuartzConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public JobFactory jobFactory() {
|
public SpringBeanJobFactory springBeanJobFactory(ApplicationContext applicationContext) {
|
||||||
SpringAwareJobFactory jobFactory = new SpringAwareJobFactory();
|
AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
|
||||||
jobFactory.setApplicationContext(applicationContext);
|
jobFactory.setApplicationContext(applicationContext);
|
||||||
return jobFactory;
|
return jobFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory) {
|
public SchedulerFactoryBean schedulerFactory(SpringBeanJobFactory jobFactory) {
|
||||||
SchedulerFactoryBean factory = new SchedulerFactoryBean();
|
SchedulerFactoryBean factory = new SchedulerFactoryBean();
|
||||||
factory.setJobFactory(jobFactory); // 关键:使用我们自定义的 JobFactory
|
factory.setJobFactory(jobFactory); // 关键配置
|
||||||
// 可以设置其它属性,如数据源等
|
// 可根据需要设置其它属性,如 dataSource、事务管理器等
|
||||||
return factory;
|
return factory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 自定义 JobFactory,支持 Spring Autowire
|
||||||
|
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 job = super.createJobInstance(bundle);
|
||||||
|
beanFactory.autowireBean(job); // 关键:让 job 的 @Autowired 生效
|
||||||
|
return job;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
package com.ebiz.component.job.config;
|
|
||||||
|
|
||||||
import org.quartz.spi.TriggerFiredBundle;
|
|
||||||
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
|
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
import org.springframework.context.ApplicationContextAware;
|
|
||||||
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
|
|
||||||
|
|
||||||
public class SpringAwareJobFactory 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 {
|
|
||||||
final Object job = super.createJobInstance(bundle);
|
|
||||||
// 让 job 也由 Spring 进行依赖注入
|
|
||||||
beanFactory.autowireBean(job);
|
|
||||||
return job;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user