我在迁移到最新的 quartz 2.2 和 spring 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 接口(interface)的工厂,而该接口(interface)又不再具有 setCronExpression 方法,它已变得不可变。在我可以简单地从上下文中找出一个触发器并设置它的新 cron 表达式之前。它工作了很多年,直到升级变得不可避免。
那么,我们今天如何完成这个简单的任务呢?完全迷失在文档和版本中。提前致谢!
最佳答案
除了 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);
}
关于java - 如何更改 CronTrigger 中的 cron 表达式(quartz 2.2,spring 4.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25737992/