`
no_bao
  • 浏览: 315826 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Quartz使用指南(七)-----Spring中使用Quartz进行作业调度

 
阅读更多

 

1             Spring中使用Quartz进行作业调度

Spring提供了支持时序调度(Scheduling)的整合类.现在,时序调度器通过FactoryBean建立,保持着可选的对Timers或者Triggers的引用。更进一步的, 对于Quartz SchedulerTimer两者存在一个方便的类允许我们调用目标对象(类似于通常的MethodInvokingFactoryBeans)上的某个方法。

1.1         使用JobDetailBean

JobDetail 对象包括了运行一个job所需要的所有信息。 于是Spring提供了一个所谓的JobDetailBean使得JobDetail拥有了一个真实的,有意义的默认值。让我们来看个例子:

<bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean">

  <property name="jobClass">

    <value>example.ExampleJob</value>

  </property>

  <property name="jobDataAsMap">

    <map>

      <entry key="timeout"><value>5</value></entry>

    </map>

  </property>

</bean>

Job detail bean拥有所有运行job(ExampleJob)的必要信息。通过jobdata map来制定timeout Jobdata map可以通过JobExecutionContext(在运行时刻传递给你)来得到, 但是JobDetailBean也把从jobdata map中得到的属性映射到实际job中的属性中去。 所以,如果ExampleJob中包含一个名为timeout的属性,JobDetailBean将自动为它赋值:

package example;

 

public class ExampleJob extends QuartzJobBean {

 

  private int timeout;

 

  /**

   * Setter called after the ExampleJob is instantiated

   * with the value from the JobDetailBean (5)

   */

  public void setTimeout(int timeout) {

    this.timeout = timeout;

  }

    protected void executeInternal(JobExecutionContext ctx)

  throws JobExecutionException {

        // do the actual work

  }

}

所有Job detail bean中的一些其他的设定对你来说也是可以同样设置的.

注意:使用namegroup属性,你可以修改job在哪一个组下运行和使用什么名称。 默认情况下,job的名称等于job detai bean的名称(在上面的例子中为exampleJob)。

1.2         使用MethodInvokingJobDetailFactoryBean

通常情况下,你只需要调用特定对象上的一个方法。你可以使用MethodInvokingJobDetailFactoryBean准确的做到这一点:

<bean id="methodInvokingJobDetail"

  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

    <property name="targetObject"><ref bean="exampleBusinessObject"/></property>

    <property name="targetMethod"><value>doIt</value></property>

</bean>

上面例子将导致exampleBusinessObject中的doIt方法被调用(如下):

public class BusinessObject {

 

  // properties and collaborators

 

  public void doIt() {

    // do the actual work

  }

}

 

<bean id="exampleBusinessObject" class="examples.ExampleBusinessObject"/>

使用MethodInvokingJobDetailFactoryBean你不需要创建只有一行代码且只调用一个方法的job, 你只需要创建真实的业务对象来包装具体的细节的对象。

默认情况下,Quartz Jobs是无状态的,可能导致jobs之间互相的影响。如果你为相同的JobDetail指定两个触发器, 很可能当第一个job完成之前,第二个job就开始了。如果JobDetail对象实现了Stateful接口,就不会发生这样的事情。 第二个job将不会在第一个job完成之前开始。为了使得jobs不并发运行,设置MethodInvokingJobDetailFactoryBean中的concurrent标记为false

<bean id="methodInvokingJobDetail"

  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

    <property name="targetObject"><ref bean="exampleBusinessObject"/></property>

    <property name="targetMethod"><value>doIt</value></property>

</bean>                

注意:默认情况下,jobs在并行的方式下运行。

1.3   使用triggersSchedulerFactoryBean来包装任务

我们已经创建了job details,jobs。我们回顾了允许你调用特定对象上某一个方法的便捷的bean。 当然我们仍需要调度这些jobs。这需要使用triggersSchedulerFactoryBean来完成。 Quartz自带一些可供使用的triggersSpring提供两个子类triggers,分别为CronTriggerBeanSimpleTriggerBean

Triggers也需要被调度。Spring提供SchedulerFactoryBean来暴露一些属性来设置triggersSchedulerFactoryBean负责调度那些实际的triggers

两个例子:

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">

  <property name="jobDetail">

    <!-- see the example of method invoking job above -->   

    <ref bean="methodInvokingJobDetail"/>

  </property>

  <property name="startDelay">

    <!-- 10 seconds -->

    <value>10000</value>

  </property>

  <property name="repeatInterval">

    <!-- repeat every 50 seconds -->

    <value>50000</value>

  </property>

</bean>

 

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

  <property name="jobDetail">

    <ref bean="exampleJob"/>

  </property>

  <property name="cronExpression">

    <!-- run every morning at 6 am -->

    <value>0 6 * * 1</value>

  </property>

</bean>

现在我们创建了两个triggers,其中一个开始延迟10秒以后每50秒运行一次,另一个每天早上6点钟运行。 我们需要创建一个SchedulerFactoryBean来最终实现上述的一切:

bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

  <property name="triggers">

    <list>

      <ref local="cronTrigger"/>

      <ref local="simpleTrigger"/>

    </list>

  </property>

</bean>

分享到:
评论

相关推荐

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    在 Spring 框架中,Quartz 是一个非常流行的开源作业调度器,可以实现任务的定时执行。在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java 定时器的功能。 Quartz 介绍 Quartz 是一个开源的作业...

    quartz-1.6.0.jar和quartz-all-1.6.0.jar

    通过Spring的`SchedulerFactoryBean`,可以轻松地在Spring应用上下文中启动和停止Quartz调度器,同时Spring还支持声明式的方式定义Job和Trigger,使得配置更加简洁。 在实际应用中,定时任务通常用于执行后台数据...

    quartz和spring-quartz

    Quartz和Spring-Quartz是两个在Java世界中广泛使用的定时任务管理框架。Quartz是一个开源的作业调度框架,允许应用程序定义和调度任务在特定时间执行。而Spring-Quartz则是Spring框架对Quartz的集成,它使得在Spring...

    spring-Quartz(作业调度)

    Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的...

    spring任务调度(Quartz )

    3. **调度器配置**:`SchedulerFactoryBean`是Spring对Quartz调度器的包装,它管理所有的触发器和任务。在这里,我们将`cron`触发器添加到调度器中,使得任务与触发器关联起来。 接下来,我们看下服务类和服务的...

    Spring中Quartz调度器的使用

    Spring 中 Quartz 调度器的使用 Spring 中 Quartz 调度器的使用是指在 Spring 框架中使用 Quartz 调度器来实现任务调度。Quartz 是一个功能强大且灵活的开源任务调度器,能够满足复杂的任务调度需求。在 Spring 中...

    Quartz(作业调度)

    在Spring框架中,Quartz可以被集成来实现复杂的定时任务调度。本文将深入探讨Quartz的使用,包括其基本概念、配置、API以及在Web应用中的实际应用。 首先,Quartz的核心概念包括Job(作业)、Trigger(触发器)和...

    spring-context-support.jar,quartz-all-1.6.0.jar

    总结起来,`spring-context-support.jar`和`quartz-all-1.6.0.jar`的组合使用,为我们提供了强大的定时任务管理功能,结合Spring的bean管理和Quartz的调度能力,使得在Java应用中实现复杂任务调度变得轻而易举。...

    Spring的定时调度--Quartz

    5. **调度器配置**:在Spring配置文件中,使用`&lt;bean&gt;`标签配置SchedulerFactoryBean,通过属性设置Quartz的配置文件、作业和触发器等。 6. **启动调度**:在Spring应用启动时,调用Scheduler的start()方法启动调度...

    spring-context-support-4.2.2和quartz-2.2.3所需Jar包

    标题中的"spring-context-support-4.2.2和quartz-2.2.3所需Jar包"涉及到两个关键的Java库:Spring Context Support 4.2.2版本和Quartz Scheduler 2.2.3版本。这两个库在企业级Java应用开发中扮演着重要角色,特别是...

    Spring中Quartz调度器的使用 示例代码

    在Spring框架中集成Quartz调度器,可以实现定时任务的高效管理。Quartz是一个开源的作业调度框架,它允许程序创建、调度和执行任务。在本示例中,我们将探讨如何在Spring应用中配置和使用Quartz,以及通过示例代码来...

    spring-boot-starter-quartz:Quartz-Scheduler的Spring-Boot自动配置

    内容需求,依赖弹簧靴石英调度器经过Spring Boot测试(直到1.0.2)1.3.8、1.4.6、1.5.3、1.5.6, (自1.0.3起)1.4.6、1.5.10、1.5.16、1.5.17用法&lt; dependency&gt;&lt; groupId&gt;de.chandre.quartz&lt;/ groupId&gt;&lt; artifactId...

    spring2.0 Quartz 执行每天定时任务 建议用quartz-all-1.8.4.jar更稳定,兼容性更好

    标题中的“Spring 2.0 Quartz 执行每天定时任务”是指使用Spring框架的Quartz集成来创建一个每天自动执行的任务。Quartz是一个开源的作业调度框架,它允许开发者定义和调度任务,以便在指定的时间自动运行。在Spring...

    Spring整合任务调度框架Quartz

    这种方式非常简单,开发者只需要在 Spring 配置文件中定义相应的 Bean,就可以使用 Quartz 实现任务调度。 以下是一个简单的示例代码: ```xml &lt;bean id="overdueRecall" class="com.sursen.souba.ddlibserve....

    spring3.0+quartz-1.6.0定时

    总结起来,"spring3.0+quartz-1.6.0定时"的实现涉及到Spring框架的定时任务支持和Quartz库的结合使用,通过Spring的配置管理Quartz调度器,定义任务和触发器,最后编写具体任务逻辑的Java类。这种组合在实际项目中...

    quartz-spring-demo

    通过 "quartz-spring-demo",开发者可以快速理解如何在 Spring 应用程序中集成和使用 Quartz,从而实现灵活的定时任务调度。这个简单的演示项目是一个学习和实践 Quartz 和 Spring 整合的好起点。

    spring的quartz使用实例

    Spring整合Quartz是一款常见的任务调度解决方案,它允许开发者在应用程序中安排定时任务的执行。Quartz是一个开源的作业调度框架,而Spring通过提供一个简洁的API使得与Quartz的集成变得简单。以下是对Spring整合...

    关于spring中quartz的配置

    在Spring框架中集成Quartz是一款常见的任务调度解决方案,它允许开发者在应用中...通过以上步骤,你就可以在Spring中成功配置并使用Quartz进行任务调度了。注意,实际应用中还需要根据具体需求调整配置和Job的实现。

    quartz整合springbatch动态集群定时实现mysql参考

    4. **集群同步策略**:确保在多节点环境中作业的正确调度和执行,可能使用了`org.quartz.impl.cluster.ClusterManager`。 5. **数据库脚本**:为Quartz和Spring Batch创建必要的数据库表,存储作业元数据和执行信息...

Global site tag (gtag.js) - Google Analytics