Quratz入门

一:介绍

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.效果

  

原文地址:https://www.cnblogs.com/juncaoit/p/8644791.html