Quartz很好的资料 : http://liuzidong.iteye.com/category/163678
Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述
Quartz 调度包的两个基本单元是作业和触发器。作业是能够调度的可执行任务,触发器提供了对作业的调度.
调度器:调度器用于将与作业触发器关联,一个作业可关联多个触发器,这样每个触发器被可以触发的作业执行;一个触发器可用于控制多个作业,触发触发时,
全部作业将获得调度。Quartz的调度器由Scheduler接口体现.
作业:只需实现org.quartz.job接口即可.Job接口包含一个方法 execute(),execute方法体是被调度的作业体。一旦实现Job接口和execute()方法,
Quartz确定作业运作的时候,它将调用 execute()方法体。
触发器:有SimpleTrigger和CronTrigger两种类型![]()
import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.impl.StdSchedulerFactory; import java.util.Date; import static org.quartz.DateBuilder.evenMinuteDate; import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger; public class SimpleExample { public void run() throws Exception { // 通过SchedulerFactory获取一个调度器实例 SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler();//得到调度器实例 Date runTime = evenMinuteDate(new Date());//运行的时间 // 通过过JobDetail封装HelloJob JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();//指定Job在Scheduler中所属组及名称,这里,组名为group1,而名称为job1。 // 创建一个SimpleTrigger实例,指定该Trigger在Scheduler中所属组及名称。 // 接着设置调度的时间规则.当前时间运行 Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build(); sched.scheduleJob(job, trigger); // 注册并进行调度 sched.start(); // 启动调度器 Thread.sleep(240L * 1000L); //当前线程等待65秒 sched.shutdown(true); //调度器停止运行 } public static void main(String[] args) throws Exception { SimpleExample example = new SimpleExample(); example.run(); }}
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import java.util.Date; public class HelloJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("done "+new Date()+context); } }项目结构