Quartz定时器

来源:互联网 发布:php 在线考试 编辑:程序博客网 时间:2024/06/05 16:07

1、先简单的进行实现,不进行任何的配置

官网下载jar包:http://www.quartz-scheduler.org/downloads/


下载之后解压会有这些jar包

2、创建一个类Quartz

public class Quartz {public static void main(String[] args) throws InterruptedException {try {//通过SchedulerFactory获取任务调度器Schedule对象SchedulerFactory sf=new StdSchedulerFactory();Scheduler sched=sf.getScheduler();//新建一个jobJobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();            //定义一个触发器,执行job的规则(秒 分 时 日 月 年)CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?"))                    .build();//job和触发器装载进调度器schedule            Date ft = sched.scheduleJob(job, trigger);            System.out.println(job.getKey() + " has been scheduled to run at: " + ft + " and repeat based on expression: "                    + trigger.getCronExpression());            //启动            sched.start();          /* //关闭            Thread.sleep(30000);           sched.shutdown(true);*/} catch (SchedulerException e) {e.printStackTrace();}}}
3、创建具体执行的定时任务,一个类MyJob继承Job

public class MyJob implements org.quartz.Job{@Overridepublic void execute(JobExecutionContext arg0) throws JobExecutionException {System.out.println("任务执行的时间:"+new Date());}}

4、运行即可看见后台每隔10s打印一次“任务执行的时间:。。。。。”

总结:这里面涉及到job、jobDetail、Trigger、Scheduler

1、job:要执行的内容,此接口只有一个方法void execute(JobExecutionContext context)

2、jobDetail:表示一个具体的可执行的调度程序,job是这个调度程序的内容,另外jobDetail还包含了这个任务调度的方案和策略

3、Trigger:代表调度参数的配置什么时候去调

4、Scheduler:代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger,当Trigger与JobDetail组合,就可以被Scheduler容器调度了

Scheduler是一个容器,容器中有一个线程池,用来并行调度执行每个作业,容器里面盛放很多的JobDetail和Trigger,当容器启动,JobDetail会根据关联的Trigger去执行(JobDetail和Trigger组成一对),当容器关闭,所有的JobDetail停止执行