[英]Spring Quartz Scheduler - Run job after the other has completed
[英]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.