quartz-scheduler - 需要动态设置quartz cron表达式

标签 quartz-scheduler

我在我的网络应用程序(Servlet web 应用程序)中使用 quartz ,下面是 quartz .property 文件和 quartz .job.xml 的快照

quartz 属性

#===================================================
# Configure the Job Initialization Plugin
#===================================================

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = jobs.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false


<?xml version='1.0' encoding='utf-8'?>
<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
  version="1.8">

    <schedule>
        <job>
            <name>my-very-clever-job</name>
            <group>MYJOB_GROUP</group>

            <description>The job description</description>
            <job-class>com.acme.scheduler.job.ReportJob</job-class>
        </job>

        <trigger>
            <cron>
                <name>my-trigger</name>
                <group>MYTRIGGER_GROUP</group>
                <job-name>my-very-clever-job</job-name>

                <job-group>MYJOB_GROUP</job-group>
                <!-- trigger every night at 4:30 am -->
                <cron-expression>0 30 4 * * ?</cron-expression>

            </cron>
        </trigger>
    </schedule>
</job-scheduling-data>

一切正常,按此顺序。我需要允许用户按照他们想要的方式更改时间(cron 表达式)。我的问题是如何动态设置 cron 表达式。

最佳答案

像这样创建一个新的触发器不起作用。

CronTrigger cronTrigger = (CronTrigger) stdScheduler.getTrigger(triggerName,triggerGroupName);
CronTrigger newTriggerIns = new CronTrigger();
newTriggerIns.setJobName(cronTrigger.getJobName());
newTriggerIns.setName(triggerName);
newTriggerIns.setCronExpression(newCronExpression);
stdScheduler.rescheduleJob(triggerName,triggerGroupName,newTriggerIns); //doesn't work

您只需要像这样编辑原始触发器:
CronTrigger cronTrigger = (CronTrigger) stdScheduler.getTrigger(triggerName,triggerGroupName);
cronTrigger.setCronExpression(newCronExpression);
stdScheduler.rescheduleJob(triggerName,triggerGroupName,cronTrigger);

关于quartz-scheduler - 需要动态设置quartz cron表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12208309/

相关文章:

grails - Spring Tool Suite Grails 集成测试无法解析 Quartz 作业的类

java - 如何在Spring框架中创建与数据库集成的运行时/动态触发器或作业调度程序?

java - 如何在 Spring 的秒 0 之前启动 quartz 调度程序?

grails - 具有非定期cron表达式槽的运行作业

java - Quartz 预定作业未触发 - 可能未处理的异常?

java - 是否可以安排 Quartz 线程每秒运行一次?

spring - Quartz 作业在 Tomcat 6/Ubuntu 10.04LTS 上部署时运行两次

java - 在 Tomcat 启动时自动启动 Quarz Scheduler

java - cron 表达式在当前日期时间执行一次

Java Quartz CronExpression 验证错误的 cron 表达式