权益使用同步逻辑调整
This commit is contained in:
@@ -4,17 +4,19 @@ import org.quartz.Scheduler;
|
||||
import org.quartz.SchedulerException;
|
||||
import org.quartz.impl.StdSchedulerFactory;
|
||||
import org.quartz.spi.JobFactory;
|
||||
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 Scheduler scheduler() throws SchedulerException {
|
||||
@@ -22,17 +24,35 @@ public class QuartzConfig {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public JobFactory jobFactory() {
|
||||
SpringAwareJobFactory jobFactory = new SpringAwareJobFactory();
|
||||
public SpringBeanJobFactory springBeanJobFactory(ApplicationContext applicationContext) {
|
||||
AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
|
||||
jobFactory.setApplicationContext(applicationContext);
|
||||
return jobFactory;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory) {
|
||||
public SchedulerFactoryBean schedulerFactory(SpringBeanJobFactory jobFactory) {
|
||||
SchedulerFactoryBean factory = new SchedulerFactoryBean();
|
||||
factory.setJobFactory(jobFactory); // 关键:使用我们自定义的 JobFactory
|
||||
// 可以设置其它属性,如数据源等
|
||||
factory.setJobFactory(jobFactory); // 关键配置
|
||||
// 可根据需要设置其它属性,如 dataSource、事务管理器等
|
||||
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