Quartz基本使用

JAVA学习网 2018-02-07 17:07:05

1.Quartz概述:简单的说就是java的一个定时任务的框架,没有那么复杂的解释,跟前端的定时器一样。在了解它之前,首先熟悉几个概念。

2.基本概念

2.1 Job:表示一个工作,要执行的具体内容。此接口中只有一个方法      void execute(JobExecutionContext context)

2.2 JobDetail:JobDetail 表示一个具体的可执行的调度程序, Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。

2.3 Trigger 代表一个调度参数的配置,什么时候去调。

2.4  Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail Trigger。当Trigger JobDetail 组合,就可以被 Scheduler 容器调度了。

解释:
l 编写 job 实现业务,要做什么具体事情问题。
l 使用 JobDetail 包装 job,是任务对象,可以被调度
l 使用 Trigger (触发器对象)定制什么时候去调用某任务对象。
l 使用 Scheduler 结合任务对象和触发器对象,很像一个大管家。

3.运行原理

1、scheduler 是一个计划调度器容器(总部),容器里面可以盛放众多的 JobDetail trigger,
当容器启动后,里面的每个 JobDetail 都会根据 trigger 按部就班自动去执行。
2 JobDetail 是一个可执行的工作,它本身可能是有状态的。
3 Trigger 代表一个调度参数的配置,什么时候去调。
4、当 JobDetail Trigger scheduler 容器上注册后,形成了装配好的作业(JobDetail 和
Trigger 所组成的一对儿),就可以伴随容器启动而调度执行了。
5 scheduler 是个容器,容器中有一个线程池,用来并行调度执行每个作业,这样可以提
高容器效率

3.案例:
3.1简单任务

3.1.1:引入相关的jar包

3.1.2:编写相关的任务

代码如下:

 1 package cn.itcast.test;
 2 
 3 import org.junit.Test;
 4 import org.quartz.JobBuilder;
 5 import org.quartz.JobDetail;
 6 import org.quartz.Scheduler;
 7 import org.quartz.SchedulerException;
 8 import org.quartz.SimpleScheduleBuilder;
 9 import org.quartz.Trigger;
10 import org.quartz.TriggerBuilder;
11 import org.quartz.impl.StdSchedulerFactory;
12 
13 import cn.itcast.service.HelloJob;
14 
15 public class Testquartz {
16     
17 //    简单任务测试
18     @Test
19     public void testSimpleTask(){
20         
21           try {
22     
23               Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
24               scheduler.start();
25 
26               // define the job and tie it to our HelloJob class
27               JobDetail job = JobBuilder.newJob(HelloJob.class)
28                   .withIdentity("job1", "group1")
29                   .build();
30 
31               // Trigger the job to run now, and then repeat every 40 seconds
32               Trigger trigger = TriggerBuilder.newTrigger()
33                   .withIdentity("trigger1", "group1")
34                   .startNow()
35                         .withSchedule(SimpleScheduleBuilder.simpleSchedule()
36                           .withIntervalInSeconds(3)
37                           .repeatForever())            
38                   .build();
39 
40               // Tell quartz to schedule the job using our trigger
41               scheduler.scheduleJob(job, trigger);
42               
43             //不让junit终止jvm
44               while(true){
45                   
46               }
47 
48           } catch (SchedulerException se) {
49               se.printStackTrace();
50           }
51     }
52     
53 }
View Code

3.1.3:计划任务

和简单任务相比,主要区别是策略不同

 1 public class QuartzTest {
 2     
 3 //    复杂任务 
 4     @Test
 5     public void testCronTrigger() throws SchedulerException{
 6 //        获取调度器
 7         Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
 8         
 9 //        开启大管家
10         scheduler.start();
11         
12          // define the job and tie it to our HelloJob class
13           JobDetail job = JobBuilder.newJob(HelloQuartz.class)
14               .withIdentity("job1", "group1")
15               .build();
16 
17           // Trigger the job to run now, and then repeat every 40 seconds
18           Trigger trigger = TriggerBuilder.newTrigger()
19               .withIdentity("trigger1", "group1")
20               .startNow()
21 //              每隔5秒执行
22                     .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * ? * *"))            
23               .build();
24 
25           // Tell quartz to schedule the job using our trigger
26           scheduler.scheduleJob(job, trigger);
27         
28 //        终止JVM执行
29         while(true){
30             
31         }
32         
33     } 
View Code

 本测试使用的jar包:

 1     <dependencies>
 2         <dependency>
 3             <groupId>org.quartz-scheduler</groupId>
 4             <artifactId>quartz</artifactId>
 5             <version>2.2.3</version>
 6         </dependency>
 7         <dependency>
 8             <groupId>org.quartz-scheduler</groupId>
 9             <artifactId>quartz-jobs</artifactId>
10             <version>2.2.3</version>
11         </dependency>
12         <!-- slf4j log4j -->
13         <dependency>
14             <groupId>org.slf4j</groupId>
15             <artifactId>slf4j-log4j12</artifactId>
16             <version>1.7.7</version>
17         </dependency>
18     <dependency>
19             <groupId>junit</groupId>
20             <artifactId>junit</artifactId>
21             <version>4.11</version>
22             <scope>test</scope>
23         </dependency>
24     </dependencies>
View Code

 

阅读(737) 评论(0)