美文网首页Java程序员spring
Spring整合Quartz(任务调度)

Spring整合Quartz(任务调度)

作者: 我相信你爱过gg | 来源:发表于2016-12-05 15:41 被阅读747次

在写这篇文章之前我写过一篇Quartz-任务调度这篇文章中的代码全部是使用Quartz API进行配置。

下面我们一起来用Spring进行整合。

首先我门创建一个类,类名还是叫MyJob

public class MyJob {
    public void execute() throws JobExecutionException
    { 
        System.out.println("这里是我们的任务代码"); 
    }
}
//可以看出我的这个类就是一个简简单单的JavaBean,这个类没有别的用处就是专门为我们来执行任务的。
下面我们来配置Spring的配置文件

第一步将我们的MyJob类放入Ioc容器中

<!-- 将我们的 任务类 放入Ioc容器为我们管理 -->
<bean class="MyJob" id="myJob"/>

问:这里为什么要将MyJob放入Ioc容器呢?
答:是因为我们通过Spring来整合我们的项目,所以需要Ioc容器来帮我们管理我们需要的实例,我们用到哪个实例的时候直接从Ioc容器中获取。

第二步创建任务

<!-- 创建任务 -->
<bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" id="jobDetail"> 
   <!-- 目标对象 -->
   <property name="targetObject" ref="myJob"/>
   <!-- 目标方法 -->
   <property name="targetMethod" value="execute"/>
</bean>

问:这里为什么要创建任务呢,不是已经创建了一个任务类(MyJob)了吗?
答:我们创建的任务类(MyJob)只是负责执行我们的任务代码,这个时候Quartz并不知道我们有这个任务,所以要创建任务让Quartz知道我们的MyJob是一个任务。

第三步创建触发器

<!-- 创建SimpleTrigger触发器 -->
<bean class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean" id="simpleTrigger"> 
   <!-- 引用任务 --> 
   <property name="jobDetail" ref="jobDetail"/> 
   <!-- 指定循环时间,以秒为单位 --> 
   <property name="repeatInterval" value="5000"/>
   </bean><!-- 创建CronTrigger触发器 -->
   <bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" id="cronTrigger">
   <!-- 引用任务 --> 
   <property name="jobDetail" ref="jobDetail"/> 
   <!-- 指定Cron表达式 --> 
   <property name="cronExpression" value="0/1 * * * * ?"/>
</bean>

问:为什么要创建两个触发器呢?
答:这是为了演示两个触发器配置的不同方法,我们使用CronTrigger触发器比较多,因为它比SimpleTrigger触发器更为灵活(控制触发时间的灵活)。

这里需要注意,我们通过Quartz API配置的时候,是创建了调度器之后,使用调度器的 scheduleJob() 方法来将任务和触发器绑定到一起。而在Spring的配置文件中,是在创建了触发器之后就要和任务绑定。

第四步创建调度器

<!-- 创建调度器 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" id="stdScheduler">
   <property name="triggers">
      <list> 
         <ref bean="cronTrigger"/>
      </list>
   </property>
</bean>

这里可以看出,调度器之创建一次就可以,只需要将我们的触发器全部放入调度器中。

将以上四步放到一个配置文件中的栗子

<!-- 将我们的 任务类 放入Ioc容器为我们管理 -->
<bean class="MyJob" id="myJob"/>
<!-- 创建任务 -->
<bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" id="jobDetail"> 
   <property name="targetObject" ref="myJob"/> 
   <property name="targetMethod" value="execute"/>
</bean>

<!-- 创建SimpleTrigger触发器 -->
<bean class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean" id="simpleTrigger"> 
   <property name="jobDetail" ref="jobDetail"/>
   <property name="repeatInterval" value="5000"/>
</bean>

<!-- 创建CronTrigger触发器 -->
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" id="cronTrigger">
   <property name="jobDetail" ref="jobDetail"/>
   <property name="cronExpression" value="0/1 * * * * ?"/>
</bean>

<!-- 创建调度器 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" id="stdScheduler"> 
   <property name="triggers"> 
      <list> 
         <ref bean="cronTrigger"/> 
      </list> 
   </property>
</bean>

注意:我使用的Spring版本为 4.3.3,Quartz版本为2.2.3。如果你使用的这两个版本不兼容,可能会出现一些错误。因为Quartz2.2.3与1.8.6创建任务和触发器的方式发生了变化,所以如果你的Spring版本较高请更换合适的Quartz版本。

配图

相关文章

  • Spring整合Quartz(任务调度)

    在写这篇文章之前我写过一篇Quartz-任务调度这篇文章中的代码全部是使用Quartz API进行配置。 下面我们...

  • Quartz任务调度器

    Quartz任务调度器 与spring的整合 核心概念 1.scheduler是一个计划调度器容器,容器里面可以盛...

  • Spring整合Quartz定时任务详解

    Spring整合Quartz定时任务详解 Spring quartz定时任务官方网站 一、概述 用Spring,就...

  • spring schedule

    在介绍了简单调度, 调度框架Quartz, 再来介绍一个spring框架的任务调度, spring-schedul...

  • [Spring]支持注解的Spring调度器

    概述 如果想在Spring中使用任务调度功能,除了集成调度框架Quartz这种方式,也可以使用Spring自己的调...

  • spring调度器

    概述 如果想在Spring中使用任务调度功能,除了集成调度框架Quartz这种方式,也可以使用Spring自己的调...

  • spring下的Quartz

    Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在Spring中怎样...

  • Spring Boot项目整合Quartz动态任务调度

    今天项目里要求在某一时间自动触发一些业务,所以想到了Quartz,看了很多网上的文章博客,也遇到了一些坑,所以想记...

  • springboot整合quartz

    spring整合quartz spring整合quartz网上有很多demo,大概说一下,因为springboot...

  • Quartz框架

    Quartz Quartz是一个全功能,开源的任务调度服务。Quartz的核心概念:schedule任务调度,jo...

网友评论

    本文标题:Spring整合Quartz(任务调度)

    本文链接:https://www.haomeiwen.com/subject/whakmttx.html