你的位置:pcMing工作室 >> 资讯 >> JAVA/JSP >> Quartz >> 详细内容 在线投稿

Quartz学习笔记--xiaoyuqi00

排行榜 收藏 打印 发给朋友 举报 来源: JavaEye   发布者:xiaoyuqi00
热度2661票  浏览681次 【共0条评论】【我要评论 时间:2010年10月17日 00:03

4BTdj*}K8o*M0 Quartz学习笔记(一)

1OR4r'E!T0

[9h [uQ^0因为下个项目需要用到定时器,以前写定时器用的是 Timer类,都是一些比较简单的 Task ,这次的后台 Task 比较多,并且业务也相对复杂,所有再看需求 的同时,自己了看了下Quartz,先将学习笔记总结如下:
)@v*_fipQx0
^ v Q o [u01、Quartz 简介pcMing工作室E(_;X$f|1Sw
a、Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
jmgNb0b、主页:http://www.quartz-scheduler.org/pcMing工作室h};e,Vb
c、目前最近版本:Quartz 1.8.0 Released - 04/22/2010
Sm Qqy7gp0pcMing工作室i^hcy$D
2、笔记记录:
^F^$ef,?;Q@0a、构建一个简单的 Quartz 程序pcMing工作室8|V I-]c7a-A,s'x
MySimpleExample.java
v4bs3ZZX)r IP0pcMing工作室eu],]J1j

package com.sc.quartz.myexamples;

import java.util.Date;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;

public class MySimpleExample {

	public void run() throws SchedulerException{
		// 创建调度者工厂
		SchedulerFactory schedulerFactory = new StdSchedulerFactory();
		// 用工厂创建一个调度者
		Scheduler scheduler = schedulerFactory.getScheduler();
		// 利用 Quartz 提供的 getNextGivenSecondDate 返回一个当前时间四舍五入的 5 的倍数时间
		long ts = TriggerUtils.getNextGivenSecondDate(null, 5).getTime();
		// 创建一个工作,并命名为‘job1’,放入‘group1’组中,HellowWorl 是在此工作中需要执行的类
		JobDetail jobDetail = new JobDetail("job1","group1",HelloWorld.class);
		// 创建一个触发器,并命名为‘trigger1’,将此触发器设置在 ‘job1’ 上 ,并设置什么情况下启动
		SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1","job1", new Date(ts), null, -1, 1000L);
		// 将 ‘job1’ 加入调度者中,
		scheduler.scheduleJob(jobDetail, simpleTrigger);
		// 开始运行调度程序
		scheduler.start();
		// 停止调度程序
		// scheduler.shutdown(true);
	}
	
	public static void main(String[] args) throws SchedulerException {
		MySimpleExample example = new MySimpleExample();
		example.run();
	}
}

w7N6W:n3Fu${j0HellowWorld.java
(YQpaF1_0
package com.sc.quartz.myexamples;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class HelloWorld implements Job {

	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		System.out.println("Hello World...");
	}

}

R!Vc4fz:B5Q0这里说下HellowWord类,此类实现了 Job 接口,重写了 Job 接口中的 execute 方法,当调度程序开始运行后,系统会自动调用 HelloWorld 的 execute 方法,也就相当于 TimerTask类中的 run 方法。
,NUgm j0
w-y1seR,v%u0b、Quartz 支持同时运行多个 Job,他会根据 quartz.properties 初始化相应的线程
a0c] }2[+v8a+E0pcMing工作室Q,_;oN| _ Z&M
c、Quartz 支持两种触发器,分别是:SimpleTrigger 和 CronTrigger,SimpleTrigger 适合一些简单的设置,例如:从什么时候开始,到什么时候,每间隔多少时间执行一次,一共执行多少次;如果你要实现一些比较复杂定时功能,就必须用 CronTrigger 类,他支持 Unix 的语言(Unix我也不熟)“0/20 * * * * ?”。
Tk@Hw0
// 表达式:从当前开始,没20秒执行一次,‘秒’
CronTrigger trigger = new CronTrigger("trigger1", "group1", "job1",
                "group1", "0/20 * * * * ?");
pcMing工作室R\0r4]M*X;?8WyD

UZ:rXN.s~y0d、Quartz 中参数的设置
F.gt@hI nm6B0Quartz 中的 JobDataMap 类,提供参数的存储,此类相当于 HaspMap 类,以键/值的方式存储数据,可以通过 JobExecutionContext 上下问类来获取 JobDataMap 的实例。pcMing工作室f0qt!r4z
// 获取上下文,并取出‘FAVORITE_COLOR’键对应的值
        JobDataMap data = context.getJobDetail().getJobDataMap();
        String favoriteColor = data.getString(FAVORITE_COLOR);
        // 为 ‘FAVORITE_COLOR’重新赋值
        data.put(EXECUTION_COUNT, count);
pcMing工作室r$Ve*fI.Gw u1ifca
pcMing工作室v$d h1F9E p r3Q
e、Quartz 可以设置打火策略
/G$E P'r[0Z2k3EJ0
trigger.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT);
pcMing工作室ib!}&\^)K

#W$sB%R| r4D'er0f cX0f、Quartz 可以设置运行失败后就行的操作
Aws0w T1OhU7r0
// 报错后立即重新运行
e2.setRefireImmediately(true);

// 报错后停止运行
e2.setUnscheduleAllTriggers(true);
pcMing工作室1V7CGi*p l
pcMing工作室-]Tz$rA9uz
g、Quartz 跳过特殊日期pcMing工作室 ld.R|6T#}`R
Quartz 支持在规定好的时间内将写特定时间跳过pcMing工作室n4Dmo6E
// Add the holiday calendar to the schedule
// 创建假期日期
AnnualCalendar holidays = new AnnualCalendar();

// halloween (Oct 31)
Calendar halloween = new GregorianCalendar(2005, 9, 31);
// 设置跳过这一天
holidays.setDayExcluded(halloween, true);

// 将此 holidays 告知调度者
sched.addCalendar("holidays", holidays, false, false);
pcMing工作室 N(RO:xg

&z6] x;{ |] ?0h、Quartz 监听器
^J}a/B,z(X5l0Quartz 支持监听器功能,目前可以监听三种状态:jobExecutionVetoed(Job执行被拒接)、jobToBeExecuted(job执行之前)、jobWasExecuted(job)执行之后。如果你想监听这些状态并想作出行为的话,需要实现 Quartz 提供的 JobListener 接口,并实现相应的方法,在其中写你要执行的程序
RH*K l4l {;x&z0pcMing工作室qv@)ad1ZFY!{:r
i、Quartz 支持插件功能pcMing工作室g nII8w6i B @ c.j
Quartz 可以通过读取xml来设置相应的参数,这样你就可以通过修改xml来修改相应的参数
h YG6f$pH(g|/`u0
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = quartz_data.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 120
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
pcMing工作室~2Ul]^'j

pcMing工作室1hxMwD5|[e

W\7?p?m@0j、其他pcMing工作室`@6D}(W Y
Quartz 支持读取远程DB、支持优先级的设置、服务器集群等等等等。pcMing工作室Z}.G4So2BO
pcMing工作室Y UMCg
3、总结pcMing工作室(y`8G)`k` rN S~
Quartz 支持的功能很多,用起来比较灵活,修改配置也很方便,并且 spring 对其也有支持,提供把 Quartz 整合在项目中。因为时间比较仓促,抽出了两天的时候才看 Quartz,所以了解的还是比较简单的,如果有什么问题或者错误还希望大家指出来,以便共同探讨,及时修改。

;Iz)c]2G X[-[U K Q0

$Dc)Rn/[bW7[X0

TAG: Quartz
顶:146 踩:136
对本文中的事件或人物打分:
当前平均分:-0.12 (820次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.27 (805次打分)
【已经有754人表态】
116票
感动
88票
路过
83票
高兴
92票
难过
84票
搞笑
96票
愤怒
92票
无聊
103票
同情
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】

网络资源