JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
// 从JobDetail中获取JobDataMap的数据
String jobDataMessage = jobDataMap.getString("message");
System.out.println("任务数据的参数值:" + jobDataMessage);
// 获取Trigger对象中获取JobDataMap的数据
JobDataMap jobDataMap2 = context.getTrigger().getJobDataMap();
String triggerDataMessage = jobDataMap2.getString("message");
System.out.println("触发器数据的参数值:" + triggerDataMessage);
//获取trigger的内容
TriggerKey triggerKey=context.getTrigger().getKey();
System.out.println("触发器名称:"+triggerKey.getName()+";触发器组:"+triggerKey.getGroup());
System.out.println("****************");
//获取其他内容
System.out.println("当前任务执行时间:"+sdf.format(context.getFireTime()));
System.out.println("下一次任务执行时间:"+sdf.format(context.getNextFireTime()));



官网:www.quartz-scheduler.org


组件模式:最终要的三部分:日任务job,触发器trigger,调度器schedule

所有的任务调度都要通过execute完成



入门案例:
public class HelloJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 输出当前时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dataString = sdf.format(date);
// 工作内容
System.out.println("正在进行数据库的备份工作,备份数据库的时间是:" + dataString);
}
}
public class HelloScheduleDemo {
public static void main(String[] args) throws Exception {
// 1.调度器(Scheduler) ,从工厂中获取调度的实例(默认:实例化)
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 2.任务实例
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1") // 参数1:任务的名称;参数2:任务组的名称
.build();
// 3.触发器
SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", "group1")// 参数1:触发器名称;参数2:触发器组的名称
.startNow()// 马上启动触发器
.withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5)).build();
// 让调度器关联任务和触发器,保证按照触发器定义的条件执行任务
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
}

public class HelloScheduleDemo {
public static void main(String[] args) throws Exception {
// 1.调度器(Scheduler) ,从工厂中获取调度的实例(默认:实例化)
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 2.任务实例
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1") // 参数1:任务的名称;参数2:任务组的名称
.build();
System.out.println("名称:" + jobDetail.getKey().getName());
System.out.println("组的名称:" + jobDetail.getKey().getGroup());
System.out.println("任务类" + jobDetail.getJobClass().getName());
// 3.触发器
SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", "group1")// 参数1:触发器名称;参数2:触发器组的名称
.startNow()// 马上启动触发器
.withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5)).build();
// 让调度器关联任务和触发器,保证按照触发器定义的条件执行任务
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
}
输出:
名称:job1 组的名称:group1 任务类com.quartz.HelloJob INFO [main] - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:06:49 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:06:54 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:06:59 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:07:04 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:07:09 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:07:14


HelloSchedulerDemo.java

HelloJob.java



![]()
如果想要获取job的数据,key不能设置和trigger一样