使用Quartz和Spring

a-s*_*sak 6 java spring scheduling quartz-scheduler

在我的应用程序中,需要能够根据进入的请求类型(动态)创建计划作业.

我还可以使用Spring来创建和触发Jobs吗?如果是,怎么样?

任何帮助都会有用.

ska*_*man 12

鉴于SchedulerFactoryBean公开了原生Quartz Scheduler对象,您可以将其直接连接到您的控制器类,然后使用Scheduler对象动态创建和注册触发器和作业.

Spring本身不能用于动态创建的作业的调度,因为Spring的bean支持将用于静态配置的作业,但原生的Quartz Scheduler API足够合理,可以单独使用(几乎没有).作为工作的触发器,那是Quartz的工作,而不是Spring的工作.

编辑:要么我错误理解原始问题,要么其他人都是.另一个回答所有细节如何使用Spring静态连接一系列石英作业,但问题是如何在请求进入时动态调度作业.


Joe*_*dge 4

看看CronTriggerBeanJobDetailBean。下面模拟的“MyJob”类是QuartzJobBean的一个实例。cron 表达式正是您所期望的,但以秒为第一个值。

<beans>
   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="startupDelay" value="5"/>
      <property name="waitForJobsToCompleteOnShutdown" value="false"/>
      <property name="triggers">
         <list>
            <bean class="org.springframework.scheduling.quartz.CronTriggerBean">
               <property name="jobDetail">
                  <bean class="org.springframework.scheduling.quartz.JobDetailBean">
                     <property name="jobClass" value="edu.vt.MyJob"/>
                     <property name="jobDataAsMap">
                        <map>
                           <entry key="messageSource" value-ref="messageSource"/>
                           <entry>
                              <key><value>anotherProperty</value></key>
                              <bean class="edu.vt.MyUsefulBean">
                                 <constructor-arg index="0" value="..."/>
                              </bean>
                           </entry>
                        </map>
                     </property>
                  </bean>
               </property>
               <property name="cronExpression" value="0 * * * * ?"/>
            </bean>
         </list>
      </property>
   </bean>
</beans>
Run Code Online (Sandbox Code Playgroud)