一、Quartz核心部分
  -- Schedule - 任务调度器
	  1、由SchedulerFactory创建,一般使用StdSchedulerFactory,创建后处于“待定”状态,start方法启动。
  2、主要用来进行组装任务与触发器注册到调度器中;启动触发器。
-- Trigger - 触发器
1、设置触发条件,常用SimpleTrigger和CronTrigger。
-- Job - 任务
1、执行的任务,需要实现Job接口(实际可继承QuartzJobBean),重写execute方法。
二、Quartz集群
1、集群中的每个节点是一个独立的Quartz应用,通过相同的数据库表来感知到另一Quartz应用。
2、集群使用JobStoreSupport存储trigger和job,基于jdbc将trigger和job存储到数据库中。
Quartz表
  
(表细则,待更新)
三、线程(调度线程、任务执行线程)
调度线程 - 常规调度线程:轮询存储的所有trigger,有需要触发的trigger,从任务执行线程池获取一个空闲线程,执行与该trigger关联的任务。
调度线程 - MisFire线程:扫描所有的trigger,查看是否有misfiredtrigger,如果有的话根据misfire的策略分别处理。
四、配置调度参数
  SchedulerFactoryBean iScheduler = new SchedulerFactoryBean();
  Scheduler.setDataSource(DataSource dataSource);
  // quartz参数
  Properties prop = new Properties();
  prop.put("org.quartz.scheduler.instanceName", "xxxxx");
  prop.put("org.quartz.scheduler.instanceId", "AUTO");
  // 线程池配置
  prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
  prop.put("org.quartz.threadPool.threadCount", "20");
  prop.put("org.quartz.threadPool.threadPriority", "5");
  // JobStore配置
  prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
  // 集群配置
   prop.put("org.quartz.jobStore.isClustered", "true");
  prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000");
  prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");
  prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true");
  // sqlserver 启用
  prop.put("org.quartz.jobStore.misfireThreshold", "12000");
  prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
  iScheduler.setQuartzProperties(prop);
  iScheduler.setSchedulerName("rabbitScheduler");
  // 延时启动
  iScheduler.setStartupDelay(1);
  iScheduler.setApplicationContextSchedulerContextKey("applicationContextKey");
  // 可选,QuartzScheduler
  // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
  iScheduler.setOverwriteExistingJobs(true);
  // 设置自动启动,默认为true
  iScheduler.setAutoStartup(true);
五、创建一个调度
  // 构建job信息, xxxxxJob.class实现了Quartz Job
  JobDetail jobDetail = JobBuilder.newJob(xxxxxJob.class).withIdentity(xxxxxJobKey).build();
  // 表达式调度构建器
  CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(xxxxxCronExpression);
  //设置失败策略,yourJobBean为自定义Job具体信息的Bean
  cronScheduleBuilder = myCronScheduleMisfirePolicy(MisfirePolicy, cronScheduleBuilder);
  // 按新的cronExpression表达式构建一个新的trigger
  CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("TriggerKey").withSchedule(cronScheduleBuilder).build();
  // 放入参数,运行时的方法可以获取
  jobDetail.getJobDataMap().put("JOB_PARAM_KEY", job);
  // 将该给定添加JobDetail到调度程序,并将给定Trigger与它关联
  scheduler.scheduleJob(jobDetail, trigger);
  cronScheduleBuilder myCronScheduleMisfirePolicy(MisfirePolicy, cronScheduleBuilder){
	    switch (MisfirePolicy) {
		      case Schedule.MISFIRE_DEFAULT:
			        return cb;
		      case Schedule.MISFIRE_IGNORE_MISFIRES:
			        return cb.withMisfireHandlingInstructionIgnoreMisfires();
		      case Schedule.MISFIRE_FIRE_AND_PROCEED:
			        return cb.withMisfireHandlingInstructionFireAndProceed();
		      case Schedule.MISFIRE_DO_NOTHING:
			        return cb.withMisfireHandlingInstructionDoNothing();
	    }
  }
(持续更新)
原文:https://www.cnblogs.com/ychblog/p/13373988.html