【Spring】Quartz Scheduler
来源:互联网 发布:社交软件英语怎么说 编辑:程序博客网 时间:2024/06/03 19:43
Quartz使用Trigger,Job和JobDetail对象来实现各种作业的调度。 有关Quartz背后的基本概念,请查看http://quartz-scheduler.org。 为方便起见,Spring提供了几个类,可简化Quartz在基于Spring的应用程序中的使用。
1. 使用 JobDetailFactoryBean
Quartz JobDetail对象包含运行作业所需的所有信息。 Spring提供了一个JobDetailFactoryBean,它为XML配置目的提供了bean样式属性。 我们来看一个例子:
<bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass" value="example.ExampleJob"/> <property name="jobDataAsMap"> <map> <entry key="timeout" value="5"/> </map> </property></bean>
作业详细信息配置具有运行作业所需的所有信息(ExampleJob)。 超时在作业数据图中指定。 作业数据映射通过JobExecutionContext(在执行时传递给您)可用,但JobDetail也从映射到作业实例的属性的作业数据中获取其属性。 所以在这种情况下,如果ExampleJob包含一个名为timeout的bean属性,那么JobDetail将会自动应用:
package example;public class ExampleJob extends QuartzJobBean { private int timeout; /** * Setter called after the ExampleJob is instantiated * with the value from the JobDetailFactoryBean (5) */ public void setTimeout(int timeout) { this.timeout = timeout; } protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException { // do the actual work }}
2. 使用 MethodInvokingJobDetailFactoryBean
通常你只需要调用特定对象的方法。 使用MethodInvokingJobDetail-
FactoryBean可以做到这一点:
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="exampleBusinessObject"/> <property name="targetMethod" value="doIt"/></bean>
上面的例子将导致在exampleBusinessObject方法上调用doIt方法(见下文):
public class ExampleBusinessObject { // properties and collaborators public void doIt() { // do the actual work }}
<bean id="exampleBusinessObject" class="examples.ExampleBusinessObject"/>
使用MethodInvokingJobDetailFactoryBean,您不需要创建仅调用方法的单行作业,您只需创建实际的业务对象并连接详细信息对象。
默认情况下,Quartz Jobs是无状态的,导致作业干扰对方的可能性。 如果为同一JobDetail指定两个触发器,则可能在第一个作业完成之前,第二个触发器将开始。 如果JobDetail类实现了Stateful接口,这不会发生。 第二个工作不会在第一个工作完成之前开始。 要使MethodInvokingJobDetailFactoryBean生成的作业不是并发的,请将concurrent标志设置为false。
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="exampleBusinessObject"/> <property name="targetMethod" value="doIt"/> <property name="concurrent" value="false"/></bean>
3. 使用触发器和SchedulerFactoryBean接线作业
我们创建了工作详细信息和工作。 我们还很方便地查看了bean,它允许您调用特定对象的方法。 当然,我们还需要安排自己的工作。 这是使用触发器和SchedulerFactoryBean完成的。 Quartz提供了几个触发器,Spring提供了两个具有方便默认值的Quartz FactoryBean实现:CronTriggerFactoryBean和SimpleTriggerFactoryBean。
触发器需要安排。 Spring提供了一个SchedulerFactoryBean,它将触发器设置为属性。 SchedulerFactoryBean使用这些触发器调度实际作业。
以下是一个实例:
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <!-- see the example of method invoking job above --> <property name="jobDetail" ref="jobDetail"/> <!-- 10 seconds --> <property name="startDelay" value="10000"/> <!-- repeat every 50 seconds --> <property name="repeatInterval" value="50000"/></bean><bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="exampleJob"/> <!-- run every morning at 6 AM --> <property name="cronExpression" value="0 0 6 * * ?"/></bean>
现在我们设置了两个触发器,一个每50秒运行一次,启动延迟为10秒,每天早上6点钟。 要完成所有操作,我们需要设置SchedulerFactoryBean:
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger"/> <ref bean="simpleTrigger"/> </list> </property></bean>
- 【Spring】Quartz Scheduler
- Spring任务调度,Quartz Scheduler
- spring定时任务(quartz-scheduler)
- Spring Scheduler定时任务 + Quartz
- Spring定时任务Quartz Scheduler
- Spring+Quartz Scheduler定时器的用法实例
- Spring 4 + Quartz Scheduler Integration Example
- quartz-scheduler
- Spring 3.1.2 + Quartz 1.8.6 scheduler example
- Spring 集成Quartz Scheduler 定时调度任务 Example
- Spring 集成Quartz Scheduler 定时调度任务 Example
- Spring 集成Quartz Scheduler 定时调度任务 Example
- quartz-scheduler集群分布式(并发)部署解决方案-Spring
- 使用Spring的Quartz Scheduler进行任务定时调度
- 利用spring+quartz-scheduler+MySql实现定时任务动态调整
- 初探quartz scheduler
- QUARTZ SCHEDULER AND LOGGING
- Quartz scheduler 简介
- QGraphicsItem如何使用信号/槽
- 弹出小窗口
- js Node.removeChild 删除子节点
- pychong爬虫爬取bilibili弹幕数据
- Poj 1742 Coins
- 【Spring】Quartz Scheduler
- HDOJ2034(为毛别人AC 我WA)
- 【数字的可视化:python画图之散点图sactter函数详解】
- 大数据学习第二天:修改mysql 默认密码(centos7)
- ul横排滚动
- Linux初学必备之基础命令篇(一)
- 第三方支付同步数据思路
- java方法的定义以及数组的使用
- Html中 发光字体 的CSS属性