如何在CronTrigger中更改cron表达式(quartz 2.2,spring 4.1)

Dim*_*ima 4 java cron spring quartz-scheduler

我有点陷入迁移到最新的石英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>
...
Run Code Online (Sandbox Code Playgroud)

现在,我需要在运行时更改其cronExpression,并不像我想象的那么简单.我不能引用bean并更改属性,因为它的工厂提供了CronTrigger接口,而接口又不再具有setCronExpression方法,它已变为不可变.之前我可以简单地从上下文中取出一个触发器并设置其新的cron表达式.多年来它一直运作良好,直到升级变得不可避免.

那么,我们今天如何完成这项简单的任务呢?文件和版本完全丢失..提前感谢!

Mar*_*idt 6

除了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);
}
Run Code Online (Sandbox Code Playgroud)