-----------------------------------Timer
PS:Timer是 jdk中的;Quartz是第三方的
PS:也即是返回执行任务时候的时间
---------------------------------------------------一个综合的例子
importjava.text.SimpleDateFormat;importjava.util.TimerTask;public class DancingRobot extendsTimerTask{
@Overridepublic voidrun() {//获取最近一次任务执行的时间,将其格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("最近执行任务的时间:"+sdf.format(scheduledExecutionTime()));//获取最近一次任务执行的时间,将其格式化
System.out.println("开心的跳舞");
}
}
importjava.util.Timer;importjava.util.TimerTask;public class WaterRobot extendsTimerTask{privateTimer timer;publicWaterRobot(Timer timer) {this.timer =timer;
}//最大容量为5L
private Integer bucketCapacity = 0;
@Overridepublic voidrun() {//灌水直到桶水满为止
if(bucketCapacity<5){
System.out.println("机器人加1L水");
bucketCapacity++;
}else{
System.out.println("返回取消的任务数 before:"+timer.purge());
cancel();//停止当前的机器人的执行
System.out.println("机器人停止加水");
System.out.println("返回取消的任务数 after:"+timer.purge());
System.out.println("当前水容量:"+bucketCapacity+"L");try{
Thread.sleep(2000);
}catch(Exception e) {
e.printStackTrace();
}
timer.cancel();//停止所有的机器人操作
}
}
}
importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Timer;public classMain {public static voidmain(String[] args) {
Timer timer= newTimer();//获取当前时间
Calendar calendar =Calendar.getInstance();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间:"+sdf.format(calendar.getTime()));
DancingRobot dr= newDancingRobot();
WaterRobot wr= newWaterRobot(timer);
timer.schedule(dr, calendar.getTime(),2000);
timer.scheduleAtFixedRate(wr, calendar.getTime(),1000);
}/*当前时间:2018-06-08 18:11:24
最近执行任务的时间:2018-06-08 18:11:25
开心的跳舞
机器人加1L水
机器人加1L水
机器人加1L水
最近执行任务的时间:2018-06-08 18:11:27
开心的跳舞
机器人加1L水
机器人加1L水
最近执行任务的时间:2018-06-08 18:11:29
开心的跳舞
返回取消的任务数 before:0
机器人停止加水
返回取消的任务数 after:1
当前水容量:5L*/}
------------------------------------Quartz
-------------------------------------Hello world-----------------------
packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.Job;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;public class HelloJob implementsJob{public void execute(JobExecutionContext arg0) throwsJobExecutionException {//打印当前的执行时间
Date date = newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前execution时间为:"+sdf.format(date));//编写具体的业务逻辑
System.out.println("hello world");
}
}
packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.SimpleTrigger;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例
StdSchedulerFactory sfact = newStdSchedulerFactory();
Scheduler scheduler=sfact.getScheduler();
scheduler.start();//打印当前的执行时间
Date date = newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间为:"+sdf.format(date));
scheduler.scheduleJob(jobDetail, trigger);
}
}
当前时间为:2018-06-14 09:57:36
当前execution时间为:2018-06-14 09:57:36
hello world
当前execution时间为:2018-06-14 09:57:38
hello world
当前execution时间为:2018-06-14 09:57:40
hello world
当前execution时间为:2018-06-14 09:57:42
hello world
当前execution时间为:2018-06-14 09:57:44
public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();
System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());
System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());
System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例
StdSchedulerFactory sfact = newStdSchedulerFactory();
Scheduler scheduler=sfact.getScheduler();
scheduler.start();//打印当前的执行时间
Date date = newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间为:"+sdf.format(date));
scheduler.scheduleJob(jobDetail, trigger);/*jobDetail的名字:myJob
jobDetail的group:group1
jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob
当前时间为:2018-06-14 10:10:25
当前execution时间为:2018-06-14 10:10:26
hello world*/}
}
---------------------------------------------------------使用JobDataMap传参数
packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.Job;importorg.quartz.JobDataMap;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;importorg.quartz.JobKey;importorg.quartz.TriggerKey;public class HelloJob implementsJob{public void execute(JobExecutionContext context) throwsJobExecutionException {//打印当前的执行时间
Date date = newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//编写具体的业务逻辑//System.out.println("hello world");
JobKey key =context.getJobDetail().getKey();
TriggerKey trKey=context.getTrigger().getKey();
JobDataMap dataMap=context.getJobDetail().getJobDataMap();
JobDataMap tDataMap=context.getTrigger().getJobDataMap(); //从中获取Map//String JobMsg = dataMap.getString("message");//Float jobFloatValue = dataMap.getFloat("FloatJobValue");
String triggerMsg = tDataMap.getString("message");
Float triggerDoubleValue= tDataMap.getFloat("DoubleTriggerValue");
System.out.println("当前execution时间为:"+sdf.format(date));
System.out.println("我的job name和group是:"+key.getName()+":"+key.getGroup());
System.out.println("我的trigger name和group是:"+trKey.getName()+":"+trKey.getGroup());//System.out.println("job message是:"+JobMsg);//System.out.println("FloatJobVAlue是:"+jobFloatValue);
System.out.println("trigger message:"+triggerMsg);
System.out.println("FloatJobVAlue是:"+triggerDoubleValue);
}
}
packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.SimpleTrigger;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").usingJobData("message", "hello myJob1").usingJobData("FloatJobValue", 3.14f).build();
System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());
System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());
System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").usingJobData("message", "hello myTrigger").usingJobData("DoubleTriggerValue", 2.0D).startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例
StdSchedulerFactory sfact = newStdSchedulerFactory();
Scheduler scheduler=sfact.getScheduler();
scheduler.start();//打印当前的执行时间
Date date = newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间为:"+sdf.format(date));
scheduler.scheduleJob(jobDetail, trigger);/*jobDetail的名字:myJob
jobDetail的group:group1
jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob
当前时间为:2018-06-14 10:10:25
当前execution时间为:2018-06-14 10:10:26
hello world*/}
}
packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.SimpleTrigger;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();/*System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());
System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());
System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());*/
//打印当前的执行时间
Date date = newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间为:"+sdf.format(date));
date.setTime(date.getTime()+3000);//开始3s后执行
Date endDate= newDate();
endDate.setTime(endDate.getTime()+6000);//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startAt(date).endAt(endDate).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例
StdSchedulerFactory sfact = newStdSchedulerFactory();
Scheduler scheduler=sfact.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);/*jobDetail的名字:myJob
jobDetail的group:group1
jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob
当前时间为:2018-06-14 10:10:25
当前execution时间为:2018-06-14 10:10:26
hello world*/}
}
packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.Job;importorg.quartz.JobDataMap;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;importorg.quartz.JobKey;importorg.quartz.Trigger;importorg.quartz.TriggerKey;public class HelloJob implementsJob{public void execute(JobExecutionContext context) throwsJobExecutionException {//打印当前的执行时间
Date date = newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前execution时间为:"+sdf.format(date));//编写具体的业务逻辑//System.out.println("hello world");
Trigger trigger=context.getTrigger();
System.out.println("start time is "+trigger.getStartTime());
System.out.println("end time is "+trigger.getEndTime());
}
}
当前时间为:2018-06-14 14:14:32
当前execution时间为:2018-06-14 14:14:35
start time is Thu Jun 14 14:14:35 CST 2018
end time is Thu Jun 14 14:14:38 CST 2018
当前execution时间为:2018-06-14 14:14:37
start time is Thu Jun 14 14:14:35 CST 2018
end time is Thu Jun 14 14:14:38 CST 2018
packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.SimpleTrigger;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();/*System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());
System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());
System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());*/
//打印当前的执行时间
Date date = newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间为:"+sdf.format(date));
date.setTime(date.getTime()+3000);//开始3s后执行
Date endDate= newDate();
endDate.setTime(endDate.getTime()+6000);//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远 被endDate 覆盖掉了执行计划
SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startAt(date).endAt(endDate).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例 定时 定频率
StdSchedulerFactory sfact = newStdSchedulerFactory();
Scheduler scheduler=sfact.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);/*jobDetail的名字:myJob
jobDetail的group:group1
jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob
当前时间为:2018-06-14 10:10:25
当前execution时间为:2018-06-14 10:10:26
hello world*/}
}
PS:
,表示或的关系
-,至 5-7 五到七
*,每秒钟
/, 每分钟没小时 0/5 没隔5分钟(..)出发一次
?,不关心
#,代表第.. 6#3 每月第三周的周五(6代表周五)
L,代表最后
packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.CronScheduleBuilder;importorg.quartz.CronTrigger;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();/*System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());
System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());
System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());*/
//打印当前的执行时间
Date date = newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间为:"+sdf.format(date));
date.setTime(date.getTime()+3000);//开始3s后执行
Date endDate= newDate();
endDate.setTime(endDate.getTime()+6000);//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *")).build();//创建schedule实例
StdSchedulerFactory sfact = newStdSchedulerFactory();
Scheduler scheduler=sfact.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.Job;importorg.quartz.JobDataMap;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;importorg.quartz.JobKey;importorg.quartz.Trigger;importorg.quartz.TriggerKey;public class HelloJob implementsJob{public void execute(JobExecutionContext context) throwsJobExecutionException {//打印当前的执行时间
Date date = newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前execution时间为:"+sdf.format(date));//编写具体的业务逻辑
System.out.println("hello world");/*Trigger trigger = context.getTrigger();
System.out.println("start time is "+trigger.getStartTime());
System.out.println("end time is "+trigger.getEndTime());*/}
}
PS: 这两种方式推荐使用std的方式。
packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.CronScheduleBuilder;importorg.quartz.CronTrigger;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException, InterruptedException {//创建一个jobdetail实例,将该实例与hellojob class绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();/*System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());
System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());
System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());*/
//打印当前的执行时间
Date date = newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间为:"+sdf.format(date));
date.setTime(date.getTime()+3000);//开始3s后执行
Date endDate= newDate();
endDate.setTime(endDate.getTime()+6000);//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *")).build();//创建schedule实例
StdSchedulerFactory sfact = newStdSchedulerFactory();
Scheduler scheduler=sfact.getScheduler();
scheduler.start();
Date scheduleDate=scheduler.scheduleJob(jobDetail, trigger);
System.out.println("开始执行时间为:"+sdf.format(scheduleDate));//scheudle执行2s挂起
Thread.sleep(2000);
scheduler.standby();//挂起//挂起3s重新启动
Thread.sleep(3000);
scheduler.start();
}
}