6

私は自分の Web アプリケーション (サーブレット Web アプリ) で 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 式を動的に設定する方法です。

4

3 に答える 3

4
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);

上記では、既存のトリガーインスタンスを取得します。新しいトリガーインスタンスを1つ作成し、cron式を設定します。

次に、既存のインスタンスを新しいインスタンスで再スケジュールします。

于 2012-09-06T06:49:00.993 に答える
4

このような新しいトリガーの作成は機能しません。

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);
于 2012-12-12T14:58:47.023 に答える
0

Quartz API を使用します。プログラムでこのトリガー インスタンスを取得し、それを CronTrigger インスタンスにキャストし、その setCronExpression を使用して式を動的に配置します。

于 2012-09-02T12:38:11.763 に答える