锁定老帖子 主题:对quartz的总结
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-08-27
Quartz 是一个强大的企业级 Schedule 工具,也是目前最好的开源 Schedule 工具。Spring中也集成了quartz的应用,下面就讲一下如何在spring中使用quartz。 spring的配置: xml 代码
Job: protected abstract void executeInternal(JobExecutionContext context) throws JobExecutionException JobDetail: java 代码
Trigger: Trigger SimpleTrigger SimpleTriggerBean CornTrigger CronTriggerBean Scheduler的常用方法 修改一个定时任务,主要是更改trigger: 删除一个定时任务,同时也会将于该jobDetail关联的trigger一并删除: 取得所有的jobDetail组 取得某个group下的所有的jobDetail 取得指定的jobDetail 取得指定的jobDetail的所有的Trigger 取得指定的Trigger Quartz的存储:
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX #表明使用JDBC进行持久化 org.quartz.dataSource.myDS.driver = net.sourceforge.jtds.jdbc.Driver 日常语义与cronTrigger的转化,以下setter,getter省略
java 代码
Scheduler 是一个计划集,其中可以包含多个 JobDetail 和 Trigger 组成的计划任务。 在Quartz中,我们可以通过 SchedulerFactory scheduleFactory = new StdSchedulerFactory(); Scheduler scheduler = scheduleFactory.getScheduler(); 来取得scheduler,通过调用scheduler.start()来启动quartz。 在spring中,org.springframework.scheduling.quartz.SchedulerFactoryBean是对Quartz的org.quartz.Scheduler的封装,通过上面的配置,在spring启动的时候,quartz就会跟随着启动,不需要再用scheduler.start()来启动。在spring中,如果要取得scheduler,可通过上面的配置文件那样,将SchedulerFactoryBean注入到schdeuler中。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-08-27
感觉用实现Job接口还是StatefulJob接口来区分有状态和无状态Job不是很方便啊
为什么不做成一个属性来设置呢? |
|
返回顶楼 | |
发表时间:2007-08-27
在quartz中, 建议每个任务的工作量, 最好是均衡的, 因为, 我发现, 有时, 某个task very busy的时候, 其他task会阻塞.
甚至导致, 当前应用出现响应超时的现象. 部署quartz的时候, 裸体单机感觉不错. |
|
返回顶楼 | |
发表时间:2007-08-30
Groovy 写道 感觉用实现Job接口还是StatefulJob接口来区分有状态和无状态Job不是很方便啊
为什么不做成一个属性来设置呢? 我对StatefulJob不太熟悉,看源代码,它是继承自Job接口的,并且也没有他自己定义的方法,应该是属于标识接口,你指的的做成一个属性来设置是什么意思呢? |
|
返回顶楼 | |
发表时间:2007-08-30
galaxystar 写道 在quartz中, 建议每个任务的工作量, 最好是均衡的, 因为, 我发现, 有时, 某个task very busy的时候, 其他task会阻塞.
甚至导致, 当前应用出现响应超时的现象. 部署quartz的时候, 裸体单机感觉不错. 我的项目中用quartz只是做了一个定时任务提醒功能,每个提醒任务的工作量基本上一样,就是发出邮件或是屏幕提醒之类的,没有发现你所有的问题。 P.S.quartz不是多线程的吗?怎么会出现task阻塞?没想明白,还请galaxystar详细讲讲 |
|
返回顶楼 | |
发表时间:2007-08-30
pheh 写道 Groovy 写道 感觉用实现Job接口还是StatefulJob接口来区分有状态和无状态Job不是很方便啊
为什么不做成一个属性来设置呢? 我对StatefulJob不太熟悉,看源代码,它是继承自Job接口的,并且也没有他自己定义的方法,应该是属于标识接口,你指的的做成一个属性来设置是什么意思呢? 这样在使用的时候需要用两个类实现分别Job和StatefulJob,我的意思是说他们既然没有什么不一样的方法,为什么不做成在构造时候传参来定义类型呢 |
|
返回顶楼 | |
发表时间:2007-08-30
小弟愚钝,还是不太明白,希望楼上的能写个示例代码说明一下,如何在构造时传参来定义类型,这个参数是什么时候赋值的,是在定时触发时吗?
public class ReminderManager extends QuartzJobBean{ private String reminderStr = ""; } 之所以定义一个reminderStr属性,是因为spring会在定时触发时自动将值注入到reminderStr中,spring已经帮我们做好了这些工作,就不用再通过参数的形式传参了,虽然这样灵活性上会差些,但是考虑到在项目中这块的需求基本上不会变动,就采取了这种方法。 |
|
返回顶楼 | |
发表时间:2007-09-04
楼主是否知道如何用CronExpression表示每个月的最后三天内某时间点触发吗?望不吝赐教
另外,对于文中“但是如果在day-of-week字段L在另一个值后面,意味着这个月的最后XXX天,比如"6L"表示这个月的最后一个星期五。”这段话,我没能理解。如果L在day-of-week段就代表是这个月的最后xxx天,为什么6L就一定代表是最后一个星期五呢? |
|
返回顶楼 | |
发表时间:2007-09-04
可惜了quartz在暂停任务后,过段时间再恢复的时候会根据停止的时间判断是否自动执行一次,导致临界任务不能控制
|
|
返回顶楼 | |
发表时间:2007-09-29
请问楼主:
可清楚quartz的实现机制,在哪个类里实现了时间监控? 比如:我的job一分钟执行一次,quartz是怎么知道什么时候该执行了?好像是把下次执行时间保存在了JobDataMap中,可是下一分钟到来时刻,是什么激发job执行呢? |
|
返回顶楼 | |