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

标签 java spring cron quartz-scheduler

我在迁移到最新的 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/

相关文章:

java - Clojure into-array 遍历数组

java - jdbc4.MySQL语法错误异常: error in your SQL syntax; check the manual MySQL server version for the right syntax to use near ') )' at line 1

java - Spring MVC 中重定向仍然保留在同一页面中

java - 从命令行启动应用程序时,如何将 Spring Boot 应用程序 jar 中的文件引用为 -D 属性值?

php - 代码点火器 Cron - "The controller/method pair you requested was not found"

objective-c - 如何在 iOS 中创建计划更新

java - HashMap 桶中的条目数

java - 如何使用 Mockito 在模拟上显示所有调用

java - 命令 "java"是 JVM 吗?

unix - 将 cron 运行的输出从 EC2 实例发送到外部电子邮件地址