簡體   English   中英

使Spring Quartz Job Scheduler運行用戶操作

[英]Make Spring Quartz Job Scheduler Run on a user action

我正在使用Spring Quartz Job Scheduler,以便在用戶選擇的日期內運行作業。 在應用程序啟動時,我需要作業調度程序開始運行特定的用戶操作,而不是自動調用作業調度程序

<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="triggers">
            <list>
            <ref bean="testme"/>
           </list>
      </property>     
</bean>

<bean id="testme" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="testme1"/>
        </property>
        <property name="cronExpression">
            <value>0 15 10 1,15 * ?</value>  
        </property>
</bean>

另外我需要先用戶選擇運行作業所需的日期,例如:星期一和星期五,然后點擊提交按鈕后,調度程序將從該點開始? 所以它的cronExpression值也會根據用戶選擇的日期而改變。 更多用戶以后可以將其更改為不同的日期。 那么有可能做到這一點,或者Quartz Job Scheduler不是實現我需要的方法嗎?

嘗試以編程方式獲取CronTriggerBean對象testme
並在其中設置所需的cronExpression。 我認為這應該有效。

調度程序將在啟動時運行。 正如Julien所提到的,關鍵是在用戶采取行動時創建作業或觸發器。

更多用戶以后可以將其更改為不同的日期。 那么有可能做到這一點,或者Quartz Job Scheduler不是實現我需要的方法嗎?

Quartz可以做到這一點。 你只需要重新安排工作。

您可以將SchedulerFactoryBean的實例自動裝配到您自己的bean中。 從SchedulerFactoryBean,您可以獲取調度程序並根據需要調整作業的觸發器或創建新的作業/觸發器:

Scheduler scheduler = schedulerFactory.getScheduler();
JobDetail job = scheduler.getJobDetail("yourJobName", "yourJobGroup");

// possibly do some stuff with the JobDetail...

// get the current trigger
CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger("yourTriggerName", "yourTriggerGroupName");

// possibly do some stuff with the current Trigger...
if (cronTrigger != null)
   something.doSomeStuff();

// replace the old trigger with a new one.  unless your users are sysadmins, they
// probably don't want to enter cron-type entries.  there are other trigger types
// besides CronTrigger. RTFM and pick the best one for your needs
CronTrigger newTrigger = new CronTrigger();
newTrigger.setName("newTriggerName");
newTrigger.setGroup("yourTriggerGroup");
newTrigger.setCronExpression("valid cron exp here");

// the new trigger must reference the job by name and group
newTrigger.setJobName("yourJobName");
newTrigger.setJobGroup("yourJobGroup");

// replace the old trigger.  this is by name, make sure it all matches up.
scheduler.rescheduleJob("yourJobName",  "yourTriggerGroup", newTrigger);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM