package s.simple;
import org.quartz.*;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Title: HelloJob
* @ProjectName quartz
* @date 2019/6/2513:52
* 实现任务逻辑的接口Job
*/
public class HelloJob implements Job {
private String testParam;
public void setTestParam(String testParam) {
this.testParam = testParam;
}
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
Date date = new Date();
SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sfd.format(date);
System.out.println("当前系统时间: "+ format);
// 值获取2种方式
// 1.获取jobDetailMap 和 TriggerDataMap
JobDataMap jobDataMap = jobExecutionContext.getTrigger().getJobDataMap();
JobDataMap jobDataMap1 = jobExecutionContext.getJobDetail().getJobDataMap();
// 合并后的Map Trgger会覆盖Detail中的key
JobDataMap mergedJobDataMap = jobExecutionContext.getMergedJobDataMap();
String message1 = mergedJobDataMap.getString("message");
// 2.传值方式也可以通过属性方式,需要定义set方法
System.out.println(testParam);
// 获取开始和结束时间
Trigger trigger = jobExecutionContext.getTrigger();
Date startTime = trigger.getStartTime();
String s_time = sfd.format(startTime);
System.out.println("开始时间:"+startTime);
Date endTime = trigger.getEndTime();
System.out.println("结束时间:"+sfd.format(endTime));
}
}
Scheduler
package s.simple;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Title: HelloScheduler
* @ProjectName quartz
* @date 2019/6/2513:58
*/
public class HelloScheduler {
public static void main(String[] args) {
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("testParam","JobDetail");
JobDataMap jobDataMap2 = new JobDataMap();
jobDataMap2.put("message","Trigger");
// 打印当前时间
Date date = new Date();
Date date2 = new Date();
Date endDate = new Date();
SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sfd.format(date);
System.out.println("current exec time is "+ format);
date.setTime(date.getTime()+3000); // 当前时间3秒
date2.setTime(date2.getTime()+4000); // 当前时间4秒
endDate.setTime(endDate.getTime()+6000); // 当前时间6秒后停止
// 创建jobDetail 并绑定helloJob
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").usingJobData(jobDataMap).build();
/**
* Trigger作用是执行Job,告诉调度程序什么时候触发
* 创建Trigger 立即执行,并每隔2秒执行,重复永远
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1")
.usingJobData(jobDataMap2)
.startAt(date).endAt(endDate) // 开始时间和结束时间
.withSchedule(SimpleScheduleBuilder
.simpleSchedule()
.withIntervalInSeconds(2)
.repeatForever())
.build();
*/
/**
* SimpleTrigger
* 距离当前时间4秒后首次执行,之后每两秒重复执行一次
SimpleTrigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("myTrigger", "group1")
.usingJobData(jobDataMap2)
.startAt(date2) // 4秒后开始时间
.withSchedule(SimpleScheduleBuilder
.simpleSchedule()
.withIntervalInSeconds(2) // 重复间隔
.withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY)) // 重复次数
.build();
*/
/**
* CronTrigger 使用
* 1. (* * * * * ? *) 每秒触发一次
* 2. (* 15 10 ? * * 2017) 2017年每天10.15触发一次
*/
CronTrigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("myTrigger", "group1")
.usingJobData(jobDataMap2)
.withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *"))
.build();
// 创建Scheduler示例
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
try {
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}