作业调度框架 Quartz.NET 2.0 beta 发布

经过整整1年多时间的开发,Quartz.NET 2.0发布了beta版,对应于Java Quartz的2.1版本,下载地址 http://quartznet.sourceforge.net/download.html 。整个版本相对于1.0版本进行了大量的修改,单元测试的代码更友好(重构了更多的接口),API是基于泛型和.NET 3.5 SP1之后的特性,例如DateTimeOffset。这是Quartz.NET 有史以来最大的、最值得兴奋的一个版本。

该版本除了在性能上有所提升外,增加了如下新特性:

  • Scheduler.Clear() 提供方便用于清除所有任务、触发器和日程的方法
  • Scheduler.ScheduleJobs((IDictionary> triggersAndJobs, boolean replace) 方法可批量增加任务和触发器
  • Scheduler.UnscheduleJobs(IList triggerKeys) 方法提供批量取消任务的
  • Scheduler.DeleteJobs(IList jobKeys),不用说,这是批量删除任务的
  • Scheduler.CheckExists(JobKey jobKey) 和 Scheduler.CheckExists(TriggerKey triggerKey)提供用于检测任务关键字的唯一性
  • AdoJobStore allows one set of tables to be used by multiple distinct scheduler instances
  • AdoJobStore is now capable of storing non-core Trigger implementations without using BLOB columns, through the use of the new TriggerPersistenceDelegate interface, which can (optionally) be implemented by implementers of custom Trigger types.
  • Cron 表达式支持指定每月的最后一天和最后一周,例如 L-3 为每月的最后三天
  • 包含调度信息的 XML 文件增加了用来指定启动时间和间隔时间的方法
  • XML 文件支持为触发器指定 priority 属性
  • 增加核心任务 DirectoryScanJob ,之前的FileScanJob 添加了一个迷你mum age参数

2.0在API上也做了重大的修改,API返回值的集合和泛型的使用,消除歧义和冗余代码,掩藏/删除不应该公开给客户端的方法,提高关注点分离,并引入与领域特定语言DSL的核心实体(jobs and triggers),自然就有了兼容性等问题,我们现在来看下都有哪些重大的修改:

  • 不在支持.NET 1.1和2.0,需要Quartz.net 2.0至少需要.NET 3.5 SP1,是由于采用了新的语言特性和类接口
  • 许多公共接口的返回值Array更改为泛型的IList和ISet,例如GetJobGroupNames(): string[] 现在更改为 GetJobGroupNames(): IList ,现在用来标识Jobs和Triggers 现在是基于JobsKey和TriggersKey,Keys 包含一个Name和一个Group。操作特定jobs/triggers 的方法使用Keys作为参数。例如GetTrigger(TriggerKey key): ITrigger 替换了GetTrigger(string name, string group): Trigger,ITrigger现在是一个接口而不是类。ISimpleTrigger, ICronTrigger也一样。新的 DSL/builder-based API 组织Jobs和Triggers。

     IJobDetail job = JobBuilder.Create<SimpleJob>() .WithIdentity("job1", "group1") .Build();

     ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartAt(DateBuilder.FutureDate(2, IntervalUnit.HOURS)) .WithSimpleSchedule(x => x.RepeatHourlyForever()) .ModifiedByCalendar("holidays") .Build();

  • JobInitializationPlugin 已经移除,用XMLSchedulingDataProcessorPlugin替代
  • Microsoft's Oracle drivers已经不再支持,使用10g 或者 11g ODP.NET drivers替代
  • 数据库的Sechema已经修改,需要使用database目录下的脚本吧1.x的Schema升级到2.0

参考文章:

作者: 自由、创新、研究、探索……
出处:http://shanyou.cnblogs.com/
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
posted @ 2011-10-15 20:25 张善友 阅读(3531) 评论(19) 编辑 收藏

 回复 引用 查看   
#1楼 2011-10-15 22:38 huoxingren      
1.0的版本,我用了好几年了。
 回复 引用 查看   
#2楼 2011-10-15 23:37 zsuxiong      
我刚用1点多的版本搞出一个基于数据库的统一任务平台,就出新版本了
 回复 引用 查看   
#3楼 2011-10-16 08:07 Tony Qu      
这两天刚用Quartz.NET整了个schedule service,确实不错。
晕,不支持.net 2.0,这个貌似不太靠谱。

 回复 引用 查看   
#4楼[楼主] 2011-10-16 08:25 shanyou      
引用zsuxiong:我刚用1点多的版本搞出一个基于数据库的统一任务平台,就出新版本了

引用huoxingren:1.0的版本,我用了好几年了。

看来这个项目还是很受欢迎的,我从0.2版本开始使用,也通过博客文章将它引入介绍给社区。

 回复 引用 查看   
#5楼 2011-10-16 11:42 testzhangsan      
赞!
 回复 引用 查看   
#6楼 2011-10-16 12:51 Zachary.XiaoZhen      
正在用 1.0 版本哦
 回复 引用 查看   
#7楼 2011-10-16 13:44 builderman      
善友兄弟,
最近在研究castle+ibatis.net
可是找不到适合最新版的Castle.Facilities.IBatisNetIntegration.dll
它们的官网上也找不到任何可下载的版本了, 非官网下载的都是很旧的版本
不知道哪里有最新版的下载
我用的是ibatis.net data mapper 1.6.2, data access 1.9.2
castle用的是2.5.4

 回复 引用 查看   
#8楼 2011-10-16 14:16 ulee      
前两天刚刚封装了下2.0的调用...
 回复 引用 查看   
#9楼 2011-10-16 19:39 程序员蛋子      
哇 这个得顶哦 我们就用这个呢 先顶下在学习……
 回复 引用 查看   
#10楼[楼主] 2011-10-16 22:15 shanyou      
@builderman
这我也不知道,很久没用过ibatis了

 回复 引用 查看   
#11楼 2011-10-16 23:23 builderman      
谢谢
 回复 引用 查看   
#12楼 2011-10-17 10:04 今朝-TODAY      
这个是必须要顶得。
 回复 引用 查看   
#13楼 2011-10-17 18:22 xnaboy      
相当不错的东西,出2.0了赞一个。
 回复 引用 查看   
#14楼 2011-11-07 10:07 monkey's      
有更详细的代码使用实例吗 老大!!!
 回复 引用 查看   
#15楼[楼主] 2011-11-07 14:01 shanyou      
@monkey&#39;s
到官网下载代码吧,有非常详细的单元测试和源代码

 回复 引用 查看   
#16楼 2011-11-22 16:23 遗忘海岸      
LZ好,请教个问题
我使用Quartz.Server 承载任务执行,quartz_jobs.xml中使用cron表达式,结果每次服务器重器时任务在每满足Cron表达式的情况就就执行了

 回复 引用 查看   
#17楼[楼主] 2012-01-13 09:37 shanyou      
@遗忘海岸
把你的cron 配置里头的<start-time> 配置删除了就可以解决你的问题

 回复 引用 查看   
#18楼 2012-01-31 09:38 omeweb      
你好,现在场景是有100个任务在同一个时间点开始执行,而QZ线程池只有40大小,那这100个任务将如何执行下去?丢弃了还是有些被延迟执行?
 回复 引用 查看   
#19楼[楼主] 2012-02-01 08:02 张善友      
@omeweb
集群是一种处理方式