因为项目的需求开始学习接触定时任务框架——quartz
一.几个重要的类/接口(概念)
- Job
实现定时任务执行的内容接口,实际的任务类需要实现该接口,该接口只有一个方法,execute(),即定时任务的业务逻辑写在该方法体中即可。
2.JobDetail
quart框架不会直接调用我们所定义的job类,而是通过反射机制实现一个类JobDetail。对于Job和JobDetail,我的理解是:Job是开发者的业务逻辑(调度任务的类容),而对于quartz框架来说则是JobDetail。
//定义一个任务
JobDetail jobDetail = JobBuilder
.newJob(MyJob.class)
.withIdentity("myJobName","myJobGroup")
.build();
3.Trigger
定时任务的执行时机,即,什么时候执行(触发),怎么样执行。Trigger是一个借口,其中实现类有多种,其中最常用的是:SimpleTrigger和CronTrigger。这两个实现类各自有各自的不同
SimpleTrigger:满足的调度需求是,在具体的时间点执行一次,或在具体的时间点执行,并且能在指定的时间间隔重复执行若干次。比如在2019年3月2日某一时间触发,或者在这个时间点触发,并且之后以每多少秒的时间间隔执行多少次。
所以SimpleTrigger的基本属性包括:开始时间,结束时间,重复次数,重复的时间间隔。可以发现SimpleTrigger能够定义的任务触发时机都是,在一个准确的时间执行,然后执行多少次(没多少时间重复一次,等多少时间后结束或者一直重复下去)
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("myTriggerName","myTriigerGroup")
.withDescription("This is a Trigger !")
.withSchedule(SimpleScheduleBuilder
.simpleSchedule()
//每五秒重复一次
.withIntervalInSeconds(5)
.repeatForever())
.build();
CronTrigger:满足的调度时机更加的复杂些。即它是基于时间表的,也就说可以定义在某一时间点都会去触发的任务,比如,在每周的周六早上八点同步一次数据到某某系统。
具体事例(代码):QuartZ官方文档
4.Schedule
理解:将任务和触发器组合后交给quartz框架进行执行。
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(jobDetail,trigger);
scheduler.start();
5.StdSchedulerFactory
工厂类,获取需要的Schedule实例。