定时任务处理-Quartz

Quartz Scheduler,定时任务 
Quartz是一个作业调度系统(a job scheduling system),负责在约定的时间到达时执行(或通知)其他软件控制。是一个Java的定时任务框架,使用它可以方便的实现计划任务,即在某个时间或每隔一定时间运行一个任务。Quartz的核心是Job/JobDetail,Trigger和Scheduler。 
1.Job/JobDetail 
       Job/JobDetail=既要执行的任务,可以通过实现Job(interface)中的excute方法来指定任务的具体操作。 他描述了一个任务具体的信息,比如名称,组名等等。JobDetail对象是在Quartz的客户端(我们的程序)在Job被关联加入到Scheduler时创建的,JobDetail包含了Job的各种属性值和   JobDataMap,JobDataMap中存放了与之相关的Job类实例的状态信息。 

2.Trigger 
       用于控制一组Job的触发,包裹SimmperTrigger和CronTrigger,后者支持一种描述触发事件和间隔的表达式语言。Quartz有个很好的想法就是分离了任务和任务执行的条件。Trigger就是控制任务执行条件的类,当Trigger认为执行条件满足的时刻,Trigger会通知相关的Job去执行。分离的好处是: 
            1).你可以为某个Job关联多个Trigger,其中任何一个条件满足都可以触发job执行,这样可以完成一些组合的高级触发条件 
            2).当Trigger失效后(比如:一个永远都不能满足的条件),你不必去声明一个新的job,代替的是你可以为job关联一个新的Trigger让job可以继续执行。 
   
3.Scheduler

       控制和管理触发器的启动和终止。 

使用Scheduler前必须实例化Scheduler,需要由SchedulerFactory类来创建Scheduler,Factory的实例可以通过在JNDI存储中的Factory的序列化的方式获取,实例化Factory后直接使用该实例很容易。

例子:

1.基础配置

1 org.quartz.scheduler.instanceName = MyScheduler
2 org.quartz.threadPool.threadCount = 3
3 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

org.quartz.scheduler.instanceName - This scheduler’s name will be “MyScheduler”.

org.quartz.threadPool.threadCount - There are 3 threads in the thread pool, which means that a maximum of 3 jobs can be run simultaneously.

org.quartz.jobStore.class - All of Quartz’s data, such as details of jobs and triggers, is held in memory (rather than in a database)

2.实例化scheduler,并启动和关闭

 1 import org.quartz.Scheduler;
 2   import org.quartz.SchedulerException;
 3   import org.quartz.impl.StdSchedulerFactory;
 4   import static org.quartz.JobBuilder.*;
 5   import static org.quartz.TriggerBuilder.*;
 6   import static org.quartz.SimpleScheduleBuilder.*;
 7 
 8   public class QuartzTest {
 9 
10       public static void main(String[] args) {
11 
12           try {
13               // Grab the Scheduler instance from the Factory
14               Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
15 
16               // and start it off
17               scheduler.start();
18 
19               scheduler.shutdown();
20 
21           } catch (SchedulerException se) {
22               se.printStackTrace();
23           }
24       }
25   }

3.定义自己的Job

1 public class HelloJob implements org.quartz.Job {
2 
3       public HelloJob () {
4       }
5 
6       public void execute(JobExecutionContext context) throws JobExecutionException {
7           System.err.println("Hello World!  HelloJob is executing.");
8       }
9   }

 

4.在scheduler启动和关闭之间执行Job

 1 // define the job and tie it to our HelloJob class
 2   JobDetail job = newJob(HelloJob.class)
 3       .withIdentity("job1", "group1")
 4       .build();
 5 
 6   // Trigger the job to run now, and then repeat every 40 seconds
 7   Trigger trigger = newTrigger()
 8       .withIdentity("trigger1", "group1")
 9       .startNow()
10             .withSchedule(simpleSchedule()
11               .withIntervalInSeconds(40)
12               .repeatForever())            
13       .build();
14 
15   // Tell quartz to schedule the job using our trigger
16   scheduler.scheduleJob(job, trigger);

 

posted @ 2016-04-13 13:31  gaungyao.wu  阅读(296)  评论(0编辑  收藏  举报