虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Java编程 > Spring Boot集成Quartz注入Spring管理的类的方法

Spring Boot集成Quartz注入Spring管理的类的方法
类别:Java编程   作者:码皇   来源:互联网   点击:

本篇文章主要介绍了Spring Boot集成Quartz注入Spring管理的类的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

在Spring Boot中使用Quartz时,在JOB中一般需要引用Spring管理的Bean,通过定义Job Factory实现自动注入。

Spring有自己的Schedule定时任务,在Spring boot中使用的时候,不能动态管理JOB,于是就使用Quartz来实现。

在Spring Boot中配置Quartz:

    import java.io.IOException;
    import java.util.Properties;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.config.PropertiesFactoryBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.scheduling.quartz.SchedulerFactoryBean;
    @Configuration@EnableSchedulingpublic class QuartzSchedule {
    @Autowired private MyJobFactory myJobFactory;
    @Bean public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
    SchedulerFactoryBean factory = new SchedulerFactoryBean();
    factory.setOverwriteExistingJobs(true);
    // 延时启动 factory.setStartupDelay(20);
    // 加载quartz数据源配置 factory.setQuartzProperties(quartzProperties());
    // 自定义Job Factory,用于Spring注入 factory.setJobFactory(myJobFactory);
    return factory;
    }
    /** * 加载quartz数据源配置 * * @return * @throws IOException */ @Bean public Properties quartzProperties() throws IOException {
    PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
    propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
    propertiesFactoryBean.afterPropertiesSet();
    return propertiesFactoryBean.getObject();
    }
    }

为了在JOB中使用Spring管理的Bean,需要重新定义一个Job Factory:

    @Componentpublic 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;
    }
    }

然后在JOB中就可以使用Spring管理的Bean了

    public class MyJob implements Job, Serializable {
    private static final long serialVersionUID = 1L;
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    @Autowired private SomeService someService;
    @Override public void execute(JobExecutionContext context) throws JobExecutionException {
    someService.doSomething();
    }
    }

下面代码是创建JOB:

    JobDetail jobDetail = JobBuilder.newJob(((Job) Class.forName(job.getClazz()).newInstance()).getClass()) .withIdentity(job.getJobName(), job.getJobGroup()).build();
    jobDetail.getJobDataMap().put("extdata", job.getExtData());
    // 表达式调度构建器 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression()) .withMisfireHandlingInstructionDoNothing();
    // 构建一个trigger TriggerBuilder<CronTrigger> triggerBuilder = TriggerBuilder.newTrigger().withIdentity(triggerKey) .withSchedule(scheduleBuilder);
    if (job.getStartTime() != null) {
    triggerBuilder.startAt(job.getStartTime());
    }
    if (job.getEndTime() != null) {
    triggerBuilder.endAt(job.getEndTime());
    }
    CronTrigger trigger = triggerBuilder.build();
    scheduler.scheduleJob(jobDetail, trigger);
    // 注入到管理类

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • SpringBoot定时任务两种(Spring Schedule 与 Quartz 整合 )实现方法
  • springboot整合Quartz实现动态配置定时任务的方法
  • springboot整合quartz实现定时任务示例
  • spring boot整合quartz实现多个定时任务的方法
  • springboot+Quartz实现任务调度的示例代码
  • spring boot + quartz集群搭建的完整步骤
相关热词搜索: Spring Boot 注入Spring管理类 Spring Boo