Quartz配置简介 (转)
来源:互联网 发布:imac装windows系统 编辑:程序博客网 时间:2024/06/05 10:17
Quartz配置简介
最近项目中用到了Quartz,在网上看到这篇文章,转过来跟大家分享。
原网址:http://beastiedog.blog.163.com/blog/static/23984625200642255527207/
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。本系统结合通过Spring来集成Quartz。
Quartz官方网址:http://www.opensymphony.com/quartz
基本概念:
1. Job:Job是Quartz中的一个接口,顾名思义,它指定了我们需要执行的任务。下面是一个简单的Job实现:
java代码:
package quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
publicclass DumbJobimplements Job {
privateint x;
publicvoid execute(JobExecutionContext context)throws JobExecutionException {
try {
System.out.println("Executing..." + x);
} catch (RuntimeException e) {
JobExecutionException e2 = new JobExecutionException(e);
System.out.println(context.getRefireCount());
throw e2;
}
}
}
需要注意的是Job实现类必须有一个无参数的构造函数,我们也从来不需要自己去实例化一个Job。Quartz负责具体的Job调度与执行。
2. JobDetail:JobDetail是一个具体的类,它用于描述Job,示例如下:
JobDetail jobDetail =new JobDetail("myJob", "myGroup", DumbJob.class);
上面初始化了一个名字为“myJob”的JobDetail,它在“myGroup”组中。注意,这里并没有Job的实例出现,我们只需要传入Job的class(这里是DumbJob.class)。
3. Trigger:触发器,它用于定义Job何时执行。最常用的是SimpleTrigger和CronTrigger。一般来说,如果你需要在一个固定的时间和重复次数或者一个固定的间隔时间,那么SimpleTrigger比较合适;如果你有许多复杂的作业调度,那么CronTrigger比较合适。 CronTrigger和Unix的cron机制基本一样,我们需要的只是一个cron表达式。比如“0 0 12 * * ?”会在每天中午12点触发Job执行;“0 15 10 ? * 6L”会在每个月的最后一个星期五的早上10:15触发Job执行。
4. Scheduler和SchedulerFactory:Scheduler负责管理Trigger、调度Job,SchedulerFactory则是Scheduler工厂,负责生成Scheduler。
下面是一个最简单的Quartz调用:
java代码:
SchedulerFactory schedFact =new org.quartz.impl.StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
sched.start();
JobDetail jobDetail = new JobDetail("myJob",null, DumbJob.class);
Trigger trigger = TriggerUtils.makeHourlyTrigger(); // fire every hour
trigger.setStartTime(TriggerUtils.getEvenHourDate(newDate())); // start on the next even hour
trigger.setName("myTrigger");
sched.scheduleJob(jobDetail, trigger);
使用Spring集成Quartz:
本系统使用Spring来集成Quartz。我们只需要在Spring中配置相应的Trigger和Job,而不需要编写任何Java代码,Spring在找到这些bean后会自动启动这些Job。下面是CLS系统中的部分配置:
Spring配置:
<bean id="dumbJob"class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="group " value="dumb "/>
<property name="jobClass " value="example.DumbJob "/>
<property name="name" value="dumbJob "/>
</bean>
<bean id="settlementJob"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="settlementBizFacade"/>
<property name="targetMethod" value="doSettlement"/>
<property name="concurrent" value="false"/>
<property name="name" value="settlement"/>
</bean>
<bean id="settlementTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="settlementJob"/>
<!-- run at 23:55 everyday -->
<property name="cronExpression" value="0 55 23 * * ?"/>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="settlementTrigger"/>
</list>
</property>
<property name="quartzProperties">
<map>
<!-- 1 job thread, change this if more jobs added -->
<entry key="org.quartz.threadPool.threadCount" value="1"/>
</map>
</property>
</bean>
首先我们需要配置一个Job,这里有两种方式:一种是为Job创建一个独立的JobClass,然后使用Spring的JobDetailBean配置该Job;另一种是使用MethodInvokingJobDetailFactoryBean指定一个方法,不需要一个单独的JobClass,它需要设置“targetObject”和“targetMethod”,则Trigger触发该Job的时候,目标方法会被调用。这里把“concurrent”设置为“false”,这被调用的方法不会在新线程里运行,而是顺序执行。
接下来我们配置了一个名为“settlementTrigger”的Cron触发器,它定义了settlementJob合适被调用。
最后需要配置的是SchedulerFactoryBean,它负责调度所有的trigger,还可以配置Quartz。因为当前的任务间隔较远,没有频繁执行的要求,所以这里把Quartz的线程数设为“1”。
- Quartz配置简介 (转)
- Quartz简介
- Quartz简介
- Quartz简介
- Quartz简介
- Quartz集群配置(一)
- (转)Quartz 在 Spring 中如何动态配置时间
- quartz配置
- Quartz 配置
- quartz 配置
- quartz配置
- Quartz scheduler 简介
- Quartz 用法简介
- Quartz 2D简介
- 【淘淘】Quartz框架简介
- Quartz(04) Quartz 基本配置
- Quartz CronTrigger最完整配置说明(转)
- 【转】quartz的触发器CronTriggerBean 配置
- sharepoint 2007 更新
- memcpy()函数
- DS-5 CE 初体验
- php里使用SOCKET通信
- linux apache 日志分析与状态
- Quartz配置简介 (转)
- AIX挂载Linux下的NFS
- JS只能输入数字一个小数点可输入负号
- 使用mingw32-make编译Tinyxml库
- 2011年最值得拥有的五大联网设备
- linux 管理小命令6—— cut、grep、find
- JMS简要介绍
- PHP字符串操作大集合
- 花费7800的linux培训-拯救硬盘(上)