Java 使Spring Quartz作业调度程序在用户操作上运行
我正在使用SpringQuartz作业调度器,以便在用户选择的日期内运行作业。当应用程序启动时,我需要在特定用户操作上运行作业调度器启动,而不是自动调用作业调度器Java 使Spring Quartz作业调度程序在用户操作上运行,java,spring,quartz-scheduler,Java,Spring,Quartz Scheduler,我正在使用SpringQuartz作业调度器,以便在用户选择的日期内运行作业。当应用程序启动时,我需要在特定用户操作上运行作业调度器启动,而不是自动调用作业调度器 <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list>
<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>
0 15 10 1,15 * ?
此外,我需要第一个用户选择的日期,他需要运行的工作,例如:周一和周五,然后点击提交按钮后,调度程序将从该点开始?因此,它的值也会根据用户选择的日期而变化。用户可以在以后将其更改为不同的日期。那么有可能做到这一点吗?或者Quartz作业调度程序不是实现我所需的方法吗?尝试以编程方式获取
CronTriggerBean
对象testme
并在其中设置所需的cron表达式。我认为这应该可以工作。调度程序将在启动时运行。正如Julien提到的,关键是在用户采取行动时创建作业或触发器 用户可以在以后将其更改为不同的日期。就是这样 可能做到这一点,或者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);
调度程序独立于作业创建运行,并且应该已经启动。然后,您的用户操作将使用适当的触发器创建作业(在Quartz文档中搜索CronTriggers以查找重复事件)。