Spring整合的quartz任务调度的实现方式

一、在web.xml中将配置文件的位置指定好。

Web.xml的配置如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="2.5"

      xmlns="http://java.sun.com/xml/ns/javaee"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

   

<context-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>/WEB-INF/classes/beans.xml</param-value>

    </context-param>

<listener> 

<listener-class>

org.springframework.web.context.ContextLoaderListener

          </listener-class>

      </listener>

</web-app>

二、导入相关的jar包

三、编写相关的类文件

package cn.itcast;

 

import java.util.Date;

 

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.springframework.scheduling.quartz.QuartzJobBean;

/**

 *
文件名    : CodeCurDate.java<br/>

 *
创建人    :涂作权<br/>

 *
日期时间: 2013-6-18下午02:09:20<br/>

 *
描述          : 创建一个要执行任务的类,该类必须继承QuartzJobBean规范<br/>

 *
版本号    : V1.0

 */

publicclass CodeCurDate
extends QuartzJobBean {

 

      /**

       *
以某个时间段为周期,循环执行的方法

       *
到大某个时间,要执行的方法

       */

      protectedvoidexecuteInternal(JobExecutionContextarg0)

                         throws JobExecutionException {

               System.out.println("ppppppppppppppppppppppppppppppppp");

               System.out.println(new Date());

      }

}

四、编写相关的配置文件

<?xmlversion="1.0"encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

        xmlns:context="http://www.springframework.org/schema/context"

        xmlns:aop="http://www.springframework.org/schema/aop"

        xmlns:tx="http://www.springframework.org/schema/tx"

               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:schemaLocation="http://www.springframework.org/schema/beans

                                   http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

                                  http://www.springframework.org/schema/context

                                  http://www.springframework.org/schema/context/spring-context-2.5.xsd

                                   http://www.springframework.org/schema/tx

                                  http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

                                  http://www.springframework.org/schema/aop

                                  http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

                                  

      <!-- 1创建执行任务的类的实例 -->

      <beanid="codeCurDate"class="org.springframework.scheduling.quartz.JobDetailBean">

        
<!--在spring中执行任务的类的实例的创建,不是通过spring的普通的方法,而是把融合到其他JobDetailBean类中-->

        
<property name="jobClass">

          <value>cn.itcast.CodeCurDate</value>

        
</property>

      </bean>

     

      <!-- 2创建一个触发器,整合执行任务的类的实例和时间关联 -->

      <beanid="codeCurDateTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">

       
<!-- 注入要执行任务的类的实例 -->

       
<property name="jobDetail"ref="codeCurDate"></property>

       
<!-- 配置该触发器,在第一次启动之前等待2秒,以毫秒为单位
-->

       
<property name="startDelay"value="2000"/>

       
<!--配置启动后,每隔4秒执行任务一次,以毫秒为单位-->

       
<property name="repeatInterval"value="4000"/>

      </bean>

     

      <!-- 3注册触发器,启动调度任务 -->

      <beanclass="org.springframework.scheduling.quartz.SchedulerFactoryBean">

         
<property name="triggers">

            <list>

               <refbean="codeCurDateTrigger"/>

            </list>

         
</property>

      </bean>

</beans>

五、启动服务器,接着就可以看到控制台中每隔一段时间就与输出。

 

 

二、通过CronTrigerBean的方式实现的任务调度策略

首先:编写任务执行类

package cn.itcast;

 

import java.util.Date;

 

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

importorg.springframework.scheduling.quartz.QuartzJobBean;

/**

 *文件名     : CodeCurDate.java<br/>

 *创建人     :涂作权<br/>

 *日期时间:2013-6-18 下午02:54:57<br/>

 *描述           :  <br/>

 *版本号     :V1.0

 */

public class CodeCurDate extendsQuartzJobBean {

 

      /**

       * 以某个时间段为周期,循环执行的方法

       * 到大某个时间,要执行的方法

       */

      protectedvoid executeInternal(JobExecutionContext arg0)

                         throwsJobExecutionException {

               System.out.println("PPPPPPPPPPPPPPPPPPPPPPPP");

               System.out.println(newDate());

      }

}

其次:在Spring的配置文件进行配置,配置代码如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

        xmlns:context="http://www.springframework.org/schema/context"

        xmlns:aop="http://www.springframework.org/schema/aop"

        xmlns:tx="http://www.springframework.org/schema/tx"

               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:schemaLocation="http://www.springframework.org/schema/beans

                                   http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

                                  http://www.springframework.org/schema/context

                                  http://www.springframework.org/schema/context/spring-context-2.5.xsd

                                   http://www.springframework.org/schema/tx

                                  http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

                                  http://www.springframework.org/schema/aop

                                  http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

 

      <!-- 1创建执行任务的类的实例 -->

      <beanid="codeCurDate"class="org.springframework.scheduling.quartz.JobDetailBean">

        
<!--在spring中执行任务的类的实例的创建,不是通过spring的普通的方法,而是把融合到其他JobDetailBean类中-->

        
<property name="jobClass">

          <value>cn.itcast.CodeCurDate</value>

        
</property>

      </bean>

     

      <!-- 2创建一个触发器,整合执行任务的类的实例和时间关联 -->

      <beanid="codeCurDateTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">

        
<!-- 注入执行任务的类 -->

        
<property name="jobDetail"ref="codeCurDate"/>

        
<!-- 配置定时执行任务,9点45分将调用该触发器的执行 -->

        
<property name="cronExpression"value="0
32 13 * * ?"
/>

      </bean>

       

      <!-- 3注册触发器,启动调度任务 -->

      <beanclass="org.springframework.scheduling.quartz.SchedulerFactoryBean">

         
<property name="triggers">

            <list>

               <refbean="codeCurDateTrigger"/>

            </list>

         
</property>

      </bean>

</beans>

最后:在web.xml中配置相关数据

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="2.5"

      xmlns="http://java.sun.com/xml/ns/javaee"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/classes/beans.xml</param-value>

  </context-param>

  <listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

</web-app>

 

 

 

时间: 2024-10-16 23:47:40

Spring整合的quartz任务调度的实现方式的相关文章

请教使用spring整合的quartz的问题

问题描述 我的定时时间是持久化到数据库里的,数据库里的时间一到quartz就是执行,但是spring.xml里面也需要设置一个默认的<value>定时时间,这样两个时间不就冲突了吗?我只想要数据库里的定时时间,spring.xml里的时间可以去掉不写吗?但是写成空启动会报错,请教解决方案,谢谢! 解决方案 解决方案二:为什么不用数据库的定时器解决这个问题?解决方案三:这问题有点麻烦,我给说下思路吧首先要写自己的CronTriggerBean即继承org.springframework.sche

spring学习笔记(25)spring整合quartz多版本实现企业级任务调度

在我们的另一个专栏<深入浅出Quartz任务调度>详细的讲解了使用Quartz适用于从普通门户至网站企业级系统的任务调度实现方法.在下面我们结合实例来完整spring和quartz的整合工作,将我们对quartz的配置统一交给spring容器进行管理.quartz1与quartz2两个版本的差别较大,他们的具体差别可参考我的另一篇文章Quartz任务调度(1)概念例析快速入门.鉴于我们的实际项目中很多依旧使用着quartz1版本,下面我们会针对quartz1和quartz2的配置分别进行分析.

Spring整合Quartz实现定时任务调度的方法_java

最近项目中需要实现定时执行任务,比如定时计算会员的积分.调用第三方接口等,由于项目采用spring框架,所以这里结合spring框架来介绍. 编写作业类 即普通的pojo,如下: package com.pcmall.task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TaskA { private static Logger logger = LoggerFactory.getLogger(Ta

spring学习笔记(26)spring整合Quartz2持久化稳健任务调度

在<Quartz任务调度(3)存储与持久化操作配置详细解析 >一文中,我们通过配置quartz.properties属性文件实现了Quartz的数据库持久化操作.现在整合spring的原理,就是相当于把我们在属性文件中的配置属性整合进SchedulerFactoryBean中,来生成我们的Scheduler类. 这里需要特别注意的是,我们通过Bean配置生成的JobDetail和CronTrigger或SimpleTrigger不能被序列化,因而不能持久化到数据库中,如果想要使用持久化任务调度

jBPM4与Spring整合的2种方式

要知道如何将jBPM4与Spring整合,可以先了解jBPM4的IOC容器,如果不了解的可以先看这篇文章(主 题:Jbpm4的IOC容器),是介绍jBPM4的IOC容器的.下面我们介绍jBPM与Spring整合的2种方式: 第一种:手工将SessionFactory放入jBPM4中. 第1步:更改jbpm.spring.default.cfg.xml配置文件,将下面的部分注释掉 <!-- <hibernate-configuration> <cfg resource="j

Spring+SpringMVC+mybatis+Quartz整合

Quartz与SpringMVC的整合 简介 Quartz是一个完全由java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制.Quartz允许开发人员根据时间间隔来调度作业.它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联.这篇文章介绍了Quartz与SSM框架的整合,包括了持久化的方法和对于任务的一些简单操作.本文包括一个简单的由vuejs和ElementUI开发的前端任务管理页面,对于vuejs和ElementUI的用法,在我的另一篇文章

Quartz任务调度(4)JobListener分版本超详细解析

在<spring学习笔记(15)趣谈spring 事件:实现业务逻辑解耦,异步调用提升用户体验>我们通过实例分析讲解了spring的事件机制,或许你会觉得其中的配置略显繁琐,而在Quartz框架中,它为我们集成了强大的事件机制,轻松地帮助我们在任务调度中完成各类辅佐操作,高内聚而耦合. 相对spring的事件实现,quartz这边简化了许多,我们只需: 1. 自定义监听器接口实现类 2. 向scheduler中注册监听器实现类 只需以上两步即可我完成我们的事件监听.对于监听器实现类中,可能有些

Quartz任务调度(1)概念例析快速入门

Quartz框架需求引入 在现实开发中,我们常常会遇到需要系统在特定时刻完成特定任务的需求,在<spring学习笔记(14)引介增强详解:定时器实例:无侵入式动态增强类功能>,我们通过引介增强来简单地模拟实现了一个定时器.它可能只需要我们自己维护一条线程就足以实现定时监控.但在实际开发中,我们遇到的需求会复杂很多,可能涉及多点任务调度,需要我们多线程并发协作.线程池的维护.对运行时间规则进行更细粒度的规划.运行线程现场的保持与恢复等等.如果我们选择自己来造轮子,可能会遇到许多难题.这时候,引入

Spring的两种任务调度Scheduled和Async

Spring提供了两种后台任务的方法,分别是: 调度任务,@Schedule 异步任务,@Async 当然,使用这两个是有条件的,需要在spring应用的上下文中声明<task:annotation-driven/>当然,如果我们是基于java配置的,需要在配置哪里加多EnableScheduling和@EnableAsync 就像下面这样 1 2 3 4 5 6 @EnableScheduling @EnableAsync public class WebAppConfig {   ....