QuartzPlugin解决Quartz1.X和2.X版本不兼容问题

本文详细介绍了Quartz2和Quartz1在版本更新后导致的class和interface设计变化,以及如何通过反射创建对象来解决版本不兼容的问题,并提供了插件的使用示例。

Quartz 2和Quartz 1在class和interface设计上有很大不同,api也有了较大调 整,所以Quzrtz 2并不兼容Quartz 1。QuartzPlugin 的API则屏蔽了2大版本的差异,方便用户使用。

<!-- more -->

版本不兼容的原因

JobDetail 和 CornTrigger 在1.X版本中 都是Class,而在2.X中则为接口。

解决方案

利用反射创建对象,比较粗暴丑类,但是解决问题

<!-- lang: java -->
if (VERSION_1.equals(version)) {
    jobDetail = Reflect.on("org.quartz.JobDetail").create(jobClassName, jobClassName, job.getClass()).get();
    trigger = Reflect.on("org.quartz.CronTrigger").create(jobClassName, jobClassName, jobCronExp).get();
} else {
    jobDetail = Reflect.on("org.quartz.JobBuilder").call("newJob", job.getClass()).call("withIdentity", jobClassName,          jobClassName).call("build").get();
    Object temp = Reflect.on("org.quartz.TriggerBuilder").call("newTrigger").get();
    temp = Reflect.on(temp).call("withIdentity", jobClassName, jobClassName).get();
    temp = Reflect.on(temp).call("withSchedule",
    Reflect.on("org.quartz.CronScheduleBuilder").call("cronSchedule", jobCronExp).get()).get();
    trigger = Reflect.on(temp).call("build").get();
}

示例代码

插件的使用就很简单了

<!-- lang: java -->
QuartzPlugin quartzPlugin = new QuartzPlugin("job.properties","config.properties");
quartzPlugin.add("*/5 * * * * ?", new YourJob());//通过API增加任务
quartzPlugin.version(QuartzPlugin.VERSION_1);//指定Quartz版本

job.properties中可以配置任务,config.properties是quartz原生的配置文件。 除开job.properties中可以配置任务,调用add方法也可以增加任务。 QuartzPlguin默认使用的Quartz 2,如果你使用的是Quartz 1那么调用version方 法指定版本。

<a href="http://kidzhou.me/blog/2015/01/30/quartzpljie-jue-quartz1-dot-xhe-2-dot-xban-ben-bu-jian-rong-wen-ti">原文</a>

转载于:https://my.oschina.net/b1412/blog/374542

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值