Java 使Spring Quartz作业调度程序在用户操作上运行

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>

我正在使用SpringQuartz作业调度器,以便在用户选择的日期内运行作业。当应用程序启动时,我需要在特定用户操作上运行作业调度器启动,而不是自动调用作业调度器

<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以查找重复事件)。