锁定老帖子 主题:动态改变quartz的触发器策略?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-07-05
trigger = TriggerUtils.makeHourlyTrigger();; //trigger every hour 上面的代码意思是每小时触发一次任务。 这个配置在 quartz第一次启动的时候就读入到内存中了,我得问题是如果我需要动态改变我得任务启动策略该怎麽作呢? 比如每小时触发一次任务后,我希望下个任务是每分钟触发一次,当然任务的次数是无限的,好像 quartz 没有考虑到这个需求,我看他的API没有提供这个解决办法,各位有用过 quartz的遇到过这个问题么? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-07-05
自己new 一个SimpleTrigger啊。
以后可以用Trigger得name, group找到这个trigger做替换的。 |
|
返回顶楼 | |
发表时间:2006-07-05
dwangel 写道 自己new 一个SimpleTrigger啊。
以后可以用Trigger得name, group找到这个trigger做替换的。 我什么时候new这个trigger呢?本次任务结束时么?那个时候还是属于本次的trigger范围的,会抛异常的 |
|
返回顶楼 | |
发表时间:2006-07-05
用Spring的SchedulerFactoryBean来调度你的Trigger,然后把SchedulerFactoryBean注入到你的Service中,就可以根据你的要求重新set你的Trigger并运行job。
我以前做过相关试验,不知道能不能满足你的要求: http://lu-zhou.spaces.msn.com/blog/cns!5985888977452F29!320.entry |
|
返回顶楼 | |
发表时间:2006-07-05
downpour 写道 用Spring的SchedulerFactoryBean来调度你的Trigger,然后把SchedulerFactoryBean注入到你的Service中,就可以根据你的要求重新set你的Trigger并运行job。
我以前做过相关试验,不知道能不能满足你的要求: http://lu-zhou.spaces.msn.com/blog/cns!5985888977452F29!320.entry 多谢回复,但是我们的开发环境是定义好的,使用的只是 quartz 1.5.2,没有使用 spring,所以使用 spring 的方式不大可能的。 我看到官方论坛上给的回复: One option is to have a trigger listener that reschedules the trigger for the next fire time it reads from the db each time the trigger completes. 但是 我定义了一个类实现 triggerListener接口,并且能够覆盖他的方法triggerComplete,这个方法如下: public void triggerFired(Trigger arg0, JobExecutionContext arg1); { 。。。。。。。。。。。。。。。。。。。。。。。。。。 } 但是荒唐的是这个 arg0参数是不能改变的!? 按照常理说它应该有个方法例如 setNextFireTime 用来改变下一次的trigger时间,但是 NextFireTime只有 getter没有 setter?! 唯一一个可能使用的方法是 triggered public abstract void triggered(Calendar calendar); This method should not be used by the Quartz client. Called when the Scheduler has decided to 'fire' the trigger (execute the associated Job);, in order to give the Trigger a chance to update itself for its next triggering (if any);. 但是里面的 Calendar还不是 java中的java.util.Calendar,是一个很奇怪的几乎和时间没有关系的对象,到底怎麽使用这个方法更新 trigger?并使他下一次生效? |
|
返回顶楼 | |
发表时间:2006-07-06
rescheduleJob(String jobName,String jobGroup ,Trigger newTrigger)
这不就行了吗? |
|
返回顶楼 | |
发表时间:2006-08-14
lyo 写道 但是 我定义了一个类实现 triggerListener接口,并且能够覆盖他的方法triggerComplete,这个方法如下: public void triggerFired(Trigger arg0, JobExecutionContext arg1); { 。。。。。。。。。。。。。。。。。。。。。。。。。。 } 但是荒唐的是这个 arg0参数是不能改变的!? 按照常理说它应该有个方法例如 setNextFireTime 用来改变下一次的trigger时间,但是 NextFireTime只有 getter没有 setter?! 唯一一个可能使用的方法是 triggered public abstract void triggered(Calendar calendar); This method should not be used by the Quartz client. 但是里面的 Calendar还不是 java中的java.util.Calendar,是一个很奇怪的几乎和时间没有关系的对象,到底怎麽使用这个方法更新 trigger?并使他下一次生效? 此Calendar非彼Calendar,好好学习下Quartz的QuickStart吧。。。 |
|
返回顶楼 | |
发表时间:2006-08-15
楼主对quartz的机制理解不深。
quartz里的trigger是触发器, Job是任务。 主scheduler检查触发器条件满足而执行任务。 如果一个trigger启动后,你仅仅再次更改trigger是无法影响到job的。应该是将期望的trigger绑定到job上。 |
|
返回顶楼 | |
发表时间:2006-09-14
可以用spring的SchedulerFactoryBean来动态加载和管理定时器。
|
|
返回顶楼 | |
发表时间:2006-09-14
在Job里面写一些 关掉现在的触发 然后修改参数 然后重新启动一个新的触发 的东西 试试
|
|
返回顶楼 | |