quartz是一个 java的 定时任务调度框架
//定义一个job
class HelloJob implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException{
System.out.println("job运行");
}
}
public static void main(String[] args)throws Exception{
SchedulerFactory sf =new StdSchedulerFactory(); //创建 调度工厂
// schedular 调度器
Scheduler scheduler=sf.getScheduler();
//myJob为任务的名称,myGroup为组
JobDetail jobDetail =new JobDetail("myJob" ,"myGroup" ,MyJob.class);
//创建CronTrigger触发器,定义什么时候执行以及执行的策略,比如执行次数,执行周期
CronTrigger trigger=new CronTrigger("cronTrigger" ,"triggerGroup" );
//cron表达式 每五分钟跑一次
CronExpression cronExpression =new CronExpression("0 */5 * * * ?");
trigger.setCronExpression(cronExpression);
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
定时任务有 2个点要关注,第一就是 定义我们要执行的job,第二个就是 触发器,决定怎么执行的,比如是周期性的,还是一次性的,触发器Trigger有很多种,上面定义的是CronTrigger, 这也是用的最多的,因为cron表达式功能比较强大
//job简单用法
public class TestHelloJob {
private static Logger log = LoggerFactory.getLogger(TestHelloJob.class);
public static void main(String[] args)throws Exception{
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler= sf.getScheduler();
//简单的触发器,在某个时间点执行
Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.SECOND,5);
Date runtime=calendar.getTime();
JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build();
SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger().
withIdentity("trigger1", "group1").startAt(runtime).build();
scheduler.scheduleJob(job, trigger);
//每3秒执行一次,共执行2次
JobDetail job2=JobBuilder.newJob(HelloJob.class).withIdentity("job2", "group2").build();
SimpleTrigger trigger2=(SimpleTrigger) TriggerBuilder.newTrigger().
withIdentity("trigger2", "group2").startAt(new Date())
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(3).withRepeatCount(2)).build();
System.out.println("trigger 重复次数:"+trigger2.getRepeatCount()
+" 重复间隔:"+trigger2.getRepeatInterval()/1000L
+" timesTrigger:"+trigger2.getTimesTriggered());
scheduler.scheduleJob(job2, trigger2);
JobDetail job3=JobBuilder.newJob(HelloJob.class).withIdentity("job3", "group3").build();
//每5秒执行一次,一直重复
SimpleTrigger trigger3=(SimpleTrigger) TriggerBuilder.newTrigger().
withIdentity("trigger3", "group3").startAt(new Date())
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5).repeatForever()).build();
System.out.println("trigger 重复次数:"+trigger3.getRepeatCount()
+" 重复间隔:"+trigger3.getRepeatInterval()/1000L
+" timesTrigger:"+trigger3.getTimesTriggered());
scheduler.scheduleJob(job3, trigger3);
JobDetail job4=JobBuilder.newJob(HelloJob.class)
.withIdentity("job4","group4").storeDurably().build();
scheduler.addJob(job4, true);
//手动触发任务
scheduler.triggerJob(JobKey.jobKey("job4","group4"));
scheduler.start();
Thread.sleep(10000);
SchedulerMetaData metaData = scheduler.getMetaData();
System.out.println(metaData.getNumberOfJobsExecuted());
scheduler.shutdown(true);
}
}