我正在使用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不是实现我需要的方法吗?
答案 0 :(得分:0)
尝试以编程方式获取CronTriggerBean
对象testme
并在其中设置所需的cronExpression。我认为这应该有效。
答案 1 :(得分:0)
调度程序将在启动时运行。正如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);