quartz简单封装

2017-06-27  本文已影响118人  jey恒

目标

结构

image.png

使用方式

# 集群名称
quartz.cluster.scheduler.name=xxx-DEV
# 启用
quartz.auto.start.up=true
@QuartzJob(cron = "0 0/30 * * * ?", desc = "测试任务")
public class XxxxJob extends AbstractQuartzJob {


  @Autowired
  private XxxxService XxxxService;

  @Override
  public void execute0(JobExecutionContext context) {

    XxxxService.do();

  }
@Bean
  public SchedulerFactoryBean schedulerFactoryBean(
      @Qualifier("quartzDataSource") DataSource quartzDataSource, QuartzJobAndTriggerListener quartzJobAndTriggerListener) {

    SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
    schedulerFactoryBean.setApplicationContext(applicationContext);
    schedulerFactoryBean.setStartupDelay(10);
    schedulerFactoryBean.setOverwriteExistingJobs(true);
    schedulerFactoryBean.setDataSource(quartzDataSource);
    schedulerFactoryBean
        .setConfigLocation(applicationContext.getResource("classpath:quartz.properties"));

    schedulerFactoryBean.setGlobalJobListeners(quartzJobAndTriggerListener);
    schedulerFactoryBean.setGlobalTriggerListeners(quartzJobAndTriggerListener);

    schedulerFactoryBean.setJobFactory(jobFactory());
    schedulerFactoryBean.setBeanName(schedulerClusterName);
    Holder holder = getQuartzHolder();
    schedulerFactoryBean.setAutoStartup(autoStartUp);
    schedulerFactoryBean
        .setJobDetails(holder.jobDetailList.toArray(new JobDetail[holder.jobDetailList.size()]));
    schedulerFactoryBean
        .setTriggers(holder.cronTriggerList.toArray(new Trigger[holder.cronTriggerList.size()]));
    return schedulerFactoryBean;

  }
public Holder getQuartzHolder() {

    Map<String, Job> quartzJobMap = applicationContext.getBeansOfType(Job.class);

    Set<String> quartNameSet = quartzJobMap.keySet();

    List<CronTrigger> triggerList = Lists.newArrayList();
    List<JobDetail> jobDetailList = Lists.newArrayList();

    for (String quartName : quartNameSet) {

      Job job = quartzJobMap.get(quartName);
      QuartzJob quartzJob = AnnotationUtils.findAnnotation(job.getClass(), QuartzJob.class);
      JobInfo jobInfo = JobInfo.create(quartzJob, job);

      JobDetail jobDetail = JobBuilder.newJob(job.getClass()).withDescription(jobInfo.getDesc())
          .storeDurably(true).withIdentity(jobInfo.getName(), jobInfo.getGroup()).build();
      CronTrigger cronTrigger = TriggerBuilder.newTrigger().forJob(jobDetail)
          .withIdentity(jobInfo.getName(), jobInfo.getGroup())
          .withSchedule(CronScheduleBuilder.cronSchedule(jobInfo.getCron())).build();

      jobDetailList.add(jobDetail);
      triggerList.add(cronTrigger);
    }

    return new Holder(triggerList, jobDetailList);
  }

上一篇 下一篇

猜你喜欢

热点阅读