Quartz源码解析(1)快速使用

本章节使用Quartz的基于内存,非集群模式的任务调度StdScheduler讲解

  
      org.quartz-scheduler
      quartz
      2.2.1
  
import org.quartz.*;
import org.quartz.impl.JobDetailImpl;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.triggers.AbstractTrigger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author paul
 * @description
 * @date 2018/11/8
 */
public class QuartzTest {

    //    
    //        org.quartz-scheduler
    //        quartz
    //        2.2.1
    //    
    public static void main(String[] args) throws SchedulerException {
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        JobDetailImpl jobDetail = (JobDetailImpl) JobBuilder.newJob(JobRun.class).build();
        {
            jobDetail.setName("JobDetail-A1");
            jobDetail.setGroup("Job-Group-A");
            JobDataMap jobDataMap = jobDetail.getJobDataMap();
            jobDataMap.put("job-data-key", "job-data-value");
        }

        CronTrigger cronTrigger = TriggerBuilder.newTrigger().startNow()
                .withSchedule(
                        CronScheduleBuilder.cronSchedule("*/1 * * * * ?").withMisfireHandlingInstructionDoNothing()
                ).build();
        {
            cronTrigger.getJobDataMap().put("trigger-data-key", "trigger-data-value");
            ((AbstractTrigger) cronTrigger).setName("SimpleTrigger-A1");
            ((AbstractTrigger) cronTrigger).setGroup("Trigger-Group-A");

            SchedulerContext context = scheduler.getContext();
            context.put("context-data-key", "context-data-value");
        }
        scheduler.scheduleJob(jobDetail, cronTrigger);
        scheduler.start();

    }

    @PersistJobDataAfterExecution //是否要存储上一次运行的数据,只针对jobDetail.getJobDataMap()
    @DisallowConcurrentExecution  //不允许job对于在单trigger或者多trigger并发执行
    public static class JobRun implements Job {
        private static final Logger LOGGER = LoggerFactory.getLogger(JobRun.class);
        public static final AtomicInteger ATOMIC_INTEGER = new AtomicInteger(0);

        @Override
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
            LOGGER.info("run..." + Arrays.deepToString(jobDataMap.getKeys()));
            int i = ATOMIC_INTEGER.incrementAndGet();
            jobDataMap.put("key-" + i, "value-" + i);
        }
    }
}


你可能感兴趣的:(Quartz源码解析(1)快速使用)