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

本章節(jié)使用Quartz的基于內(nèi)存,非集群模式的任務(wù)調(diào)度StdScheduler講解

  <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.2.1</version>
  </dependency>
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 {

    //    <dependency>
    //        <groupId>org.quartz-scheduler</groupId>
    //        <artifactId>quartz</artifactId>
    //        <version>2.2.1</version>
    //    </dependency>
    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 //是否要存儲上一次運(yùn)行的數(shù)據(jù),只針對jobDetail.getJobDataMap()
    @DisallowConcurrentExecution  //不允許job對于在單trigger或者多trigger并發(fā)執(zhí)行
    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);
        }
    }
}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容