一:介绍
1.应用场景
基本上任何公司都会用到调度这个功能, 比如我们公司需要定期执行调度生成报表, 或者比如博客什么的定时更新之类的,都可以靠Quartz来完成。正如官网所说,小到独立应用大到大型电子商务网站, Quartz都能胜任。
2..内部组件结构
Quartz拥有完善的事件和监听体系,大部分组件都拥有事件,如任务执行前事件、任务执行后事件、触发器触发前事件、触发后事件、调度器开始事件、关闭事件等等,可以注册相应的监听器处理感兴趣的事件。
下图描述了Scheduler的内部组件结构,SchedulerContext提供Scheduler全局可见的上下文信息,每一个任务都对应一个JobDataMap,虚线表达的JobDataMap表示对应有状态的任务:
二:普通触发器程序(来自官网)
1.新建maven项目
2.pom文件
这个版本是2.2.1的maven库。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>Quratz</groupId> 8 <artifactId>job</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 <dependencies> 11 <dependency> 12 <groupId>org.quartz-scheduler</groupId> 13 <artifactId>quartz</artifactId> 14 <version>2.2.1</version> 15 </dependency> 16 <dependency> 17 <groupId>org.quartz-scheduler</groupId> 18 <artifactId>quartz-jobs</artifactId> 19 <version>2.2.1</version> 20 </dependency> 21 </dependencies> 22 23 </project>
3.JobDetail代码
1 import org.quartz.Job; 2 import org.quartz.JobExecutionContext; 3 import org.quartz.JobExecutionException; 4 5 public class MyJob implements Job { 6 public MyJob(){} 7 public void execute(JobExecutionContext context)throws JobExecutionException{ 8 System.err.println("Hello World! MyJob is executing."); 9 } 10 }
4.设置触发器
1 import org.quartz.*; 2 import org.quartz.impl.StdSchedulerFactory; 3 4 import static org.quartz.JobBuilder.newJob; 5 import static org.quartz.SimpleScheduleBuilder.simpleSchedule; 6 7 public class SchedulerTest { 8 9 public static void main(String[] args)throws Exception{ 10 Scheduler scheduler=null; 11 SchedulerFactory schedulerfactory = new StdSchedulerFactory(); 12 scheduler = schedulerfactory.getScheduler(); 13 // define the job and tie it to our MyJob class 14 JobDetail job = newJob(MyJob.class) 15 .withIdentity("job1", "group1") 16 .build(); 17 18 // Trigger the job to run now 19 Trigger trigger = TriggerBuilder.newTrigger() 20 .withIdentity("trigger1", "group1") 21 .startNow() 22 .withSchedule(simpleSchedule() 23 .withIntervalInSeconds(5) 24 .repeatForever()) 25 .build(); 26 27 // Tell quartz to schedule the job using our trigger 28 scheduler.scheduleJob(job, trigger); 29 // 启动调度 30 scheduler.start(); 31 32 Thread.sleep(100); 33 34 // 停止调度 35 // scheduler.shutdown(); 36 } 37 }
5.效果
三:Cron触发程序
1.cron表达式触发器
1 import org.quartz.*; 2 import org.quartz.impl.StdSchedulerFactory; 3 4 import static org.quartz.JobBuilder.newJob; 5 import static org.quartz.SimpleScheduleBuilder.simpleSchedule; 6 7 public class SchedulerCronTest { 8 9 public static void main(String[] args)throws Exception{ 10 Scheduler scheduler=null; 11 SchedulerFactory schedulerfactory = new StdSchedulerFactory(); 12 scheduler = schedulerfactory.getScheduler(); 13 // define the job and tie it to our MyJob class 14 JobDetail job = newJob(MyJob.class) 15 .withIdentity("job1", "group1") 16 .build(); 17 18 // Trigger the job to run now, and then repeat every 40 seconds 19 Trigger trigger = TriggerBuilder.newTrigger() 20 .withIdentity("trigger1", "group1") 21 .startNow() 22 .withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ?")) 23 .build(); 24 25 // Tell quartz to schedule the job using our trigger 26 scheduler.scheduleJob(job, trigger); 27 // 启动调度 28 scheduler.start(); 29 30 Thread.sleep(100); 31 32 // 停止调度 33 // scheduler.shutdown(); 34 } 35 }
7.效果