quartz(三)工厂类总结

本篇文章中将会对quartz常用的factory进行总结

SchedulerFactory接口为调度器工厂接口 SchedulerFactory中主要方法介绍

  • getScheduler()获取一个可用的调度器
  • getScheduler(String schedName)通过调度器名字得到调度器

JobFactory接口负责生成Job的具体实例,如果我们需要Job实例支持bean注入那么我们需要实现这个接口进行自己实现

JobFactory中主要方法介绍:newJob()生成Job实例

AdaptableJobFactory为JobFactory的实现类,实现了具体的Job实例创建

注:我们如果需要实现JOb实例支持自动注入sevice,那么我们需要继承上面这个类进行自己的实现,使其支持自动注入

@Component
public class MyJobFactory extends AdaptableJobFactory {
    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;
    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        // 调用父类的方法
        Object jobInstance = super.createJobInstance(bundle);
        // 进行注入
        capableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }}

SchedulerFactoryBean为spring提供的由FactoryBean创建并配置一个Quartz调度器,将其生命周期作为Spring应用程序上下文的一部分进行管理,并将调度器公开为依赖项注入的bean引用,可以根据需要进行合理的默认配置如下方代码:

@Configuration
public class QuarzConfig {
    @Autowired
    DataSource dataSource;

    @Autowired
    private ApplicationContext applicationContext;
    @Autowired
    private MyJobFactory myJobFactory;
    @Autowired
    private TriggerListner triggerListner;

    @Autowired
    private JobsListener jobsListener;
    @Autowired
    private SchedulerListeners schedulerListeners;

    /**
     * create scheduler
     */
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() throws IOException {

        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        factory.setOverwriteExistingJobs(true);
        factory.setDataSource(dataSource);
        //读取配置文件中quartz的配置
        factory.setQuartzProperties(quartzProperties());

        //Register listeners to get notification on Trigger misfire etc
        //设置自定义的监听器
        factory.setGlobalTriggerListeners(triggerListner);
        factory.setGlobalJobListeners(jobsListener);
        factory.setSchedulerListeners(schedulerListeners);
        设置自定义的JobFactory
        factory.setJobFactory(myJobFactory);
        return factory;
    }

    /**
     * Configure quartz using properties file
     */
    @Bean
    public Properties quartzProperties() throws IOException {
        PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
        propertiesFactoryBean.setLocation(new ClassPathResource("/quarz.properties"));
        propertiesFactoryBean.afterPropertiesSet();
        return propertiesFactoryBean.getObject();
    }


}

CronTriggerFactoryBean和SimpleTriggerFactoryBean为spring提供的由FactoryBean创建并配置一个Cron及simple触发器,可以根据需求对触发器进行合理的默认配置,代码如下

//创建cron触发器
 public static Trigger createCronTrigger(String triggerName, Date startTime, String cronExpression, int misFireInstruction){
        CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
        factoryBean.setName(triggerName);
        factoryBean.setStartTime(startTime);
        factoryBean.setCronExpression(cronExpression);
        factoryBean.setMisfireInstruction(misFireInstruction);
        try {
            factoryBean.afterPropertiesSet();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return factoryBean.getObject();
    }
    创建simple触发器
     public static Trigger createSingleTrigger(String triggerName, Date startTime, int misFireInstruction){
        SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
//        SimpleTrigger simpleTrigger = new SimpleTrigger();
        factoryBean.setName(triggerName);
        factoryBean.setStartTime(startTime);
        factoryBean.setMisfireInstruction(misFireInstruction);
        factoryBean.setRepeatCount(0);
        factoryBean.afterPropertiesSet();
        return factoryBean.getObject();
    }

JobDetailFactoryBean用于创建JobDetail实例的Spring FactoryBeanJobDetail(Impl)本身已经是一个JavaBean,但是缺少合理的默认值,通过此类可以进行默认设置的设置,如下方代码

  public static JobDetail createJob(Class jobClass, boolean isDurable,
                                      ApplicationContext context, String jobName, String jobGroup, String remindDto){
        JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
        factoryBean.setJobClass(jobClass);
        factoryBean.setDurability(isDurable);
        factoryBean.setApplicationContext(context);
        factoryBean.setName(jobName);
        factoryBean.setGroup(jobGroup);
        JobDataMap jobDataMap = new JobDataMap();
        jobDataMap.put("message",remindDto);
        factoryBean.setJobDataMap(jobDataMap);
        factoryBean.afterPropertiesSet();
        return factoryBean.getObject();
    }

至此将我们在Spring boot中需要是要quartz需求配置的内容及常使用的一个类进行的介绍。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容