我有点卡在移植到最新的石英2.2和弹簧4.1 ......这里是一个cron触发器,为了清晰起见,我省略了工作和其他绒毛:
...
<bean id="timeSyncTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="timeSyncJob"/>
<property name="startDelay" value="10000"/>
<property name="cronExpression" value="0 0 1 * * ? *"/>
</bean>
...
现在,我需要在运行时更改其 cronExpression ,并不像我想象的那么简单。我无法引用bean并更改属性,因为它的工厂提供了 CronTrigger 接口,而该接口又不再具有 setCronExpression 方法,它具有变得一成不变。之前我可以简单地从上下文中取出一个触发器并设置其新的cron表达式。多年来它一直运作良好,直到升级变得不可避免。
那么,我们今天如何完成这项简单的任务呢?完全丢失了文档和版本..提前感谢!
答案 0 :(得分:5)
除了CronTriggerFactoryBean
之外,您可能还有一个SchedulerFactoryBean
,它可以访问Quartz调度程序以及CronTrigger。 Quartz调度程序允许您使用新的/修改的触发器重新安排作业:
@Autowired private SchedulerFactoryBean schedulerFactoryBean;
...
public void rescheduleCronJob() {
String newCronExpression = "..."; // the desired cron expression
Scheduler scheduler = schedulerFactoryBean.getScheduler();
TriggerKey triggerKey = new TriggerKey("timeSyncTrigger");
CronTriggerImpl trigger = (CronTriggerImpl) scheduler.getTrigger(triggerKey);
trigger.setCronExpression(newCronExpression );
scheduler.rescheduleJob(triggerKey, trigger);
}
答案 1 :(得分:2)