一、背景

  上次我们介绍了如何使用Spring Task进行完成定时任务的编写,这次我们使用Spring整合Quartz的方式来再一次实现定时任务的开发,以下奉上开发步骤及注意事项等。

二、开发环境及必须jar包依赖

1.开发环境

  • Spring 4.2.6.RELEASE
  • Maven 3.3.9
  • JDK 1.7
  • Idea 15.04

2.必不可少jar包依赖

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-context-support</artifactId>
  4. <version>4.2.6.RELEASE</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.quartz-scheduler</groupId>
  8. <artifactId>quartz</artifactId>
  9. <version>2.2.1</version>
  10. </dependency>

三、开发步骤

【1】.基于特定基类

 1. 编写任务类,该类需要继承自QuartzJobBean

  1. 1 package com.hafiz.www.cron;
  2. 2
  3. 3 import org.quartz.JobExecutionContext;
  4. 4 import org.quartz.JobExecutionException;
  5. 5 import org.slf4j.Logger;
  6. 6 import org.slf4j.LoggerFactory;
  7. 7 import org.springframework.scheduling.quartz.QuartzJobBean;
  8. 8
  9. 9 /**
  10. 10 * Desc:第二个基于Spring Quartz的定时任务
  11. 11 * Created by hafiz.zhang on 2016/12/11.
  12. 12 */
  13. 13 public class SecondCron extends QuartzJobBean {
  14. 14 private static final Logger logger = LoggerFactory.getLogger(SecondCron.class);
  15. 15 private Integer timeout;
  16. 16
  17. 17 //调度工厂实例化后,经过timeout时间开始执行调度
  18. 18 public void setTimeout(Integer timeout) {
  19. 19 this.timeout = timeout;
  20. 20 }
  21. 21
  22. 22 @Override
  23. 23 protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
  24. 24 logger.info("定时任务2进行中.......");
  25. 25 // do something else
  26. 26 }
  27. 27 }

2.在spring配置文件中配置作业类JobDetailFactoryBean、作业调度的触发方式(触发器)、调度工厂

  1. 1 <beans xmlns="http://www.springframework.org/schema/beans"
  2. 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. 3 xmlns:task="http://www.springframework.org/schema/task"
  4. 4 xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. 5 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  6. 6 http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
  7. 7
  8. 8 <bean name="secondCron" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
  9. 9 <property name="jobClass" value="com.hafiz.www.cron.SecondCron"/>
  10. 10 <property name="jobDataAsMap">
  11. 11 <map>
  12. 12 <entry key="timeout" value="0"/>
  13. 13 </map>
  14. 14 </property>
  15. 15 </bean>
  16. 16
  17. 17 <!--按照一定频率的触发器-->
  18. 18 <!--<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
  19. 19 <property name="jobDetail" ref="secondCron"/>
  20. 20 <property name="startDelay" value="0"/>
  21. 21 <property name="repeatInterval" value="2000"/>
  22. 22 </bean>-->
  23. 23
  24. 24 <!--Cron表达式触发器-->
  25. 25 <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
  26. 26 <property name="jobDetail" ref="secondCron"/>
  27. 27 <property name="cronExpression" value="0/5 * * * * ?"/>
  28. 28 </bean>
  29. 29
  30. 30 <!--配置调度工厂-->
  31. 31 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  32. 32 <property name="triggers">
  33. 33 <list>
  34. 34 <!--<ref bean="simpleTrigger"/>-->
  35. 35 <ref bean="cronTrigger"/>
  36. 36 </list>
  37. 37 </property>
  38. 38 </bean>
  39. 39 </beans>

注意:

  1).org.springframework.scheduling.quartz.JobDetailBean有两个属性.

    jobClass属性即我们在java代码中定义的任务类.

    jobDataAsMap属性即该任务类中需要注入的属性值.

  2).Quartz的作业触发器有两种(两种任选其一就行)

    org.springframework.scheduling.quartz.SimpleTriggerFactoryBean:只支持按照一定频度调用任务,如每隔30分钟运行一次.

    org.springframework.scheduling.quartz.CronTriggerFactoryBean:支持到指定时间运行一次,如每天12:00运行一次等.

    关于第二种触发器的Cron表达式,请参见另一篇博客:摆脱Spring 定时任务的@Scheduled cron表达式的困扰

  3).org.springframework.scheduling.quartz.SchedulerFactoryBean的参数triggers指定的就是之前配置的触发器的名字.

    3.运行结果

【2】.不基于特定的基类

 1.编写任务调度类

  1. package com.hafiz.www.cron;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4.  
  5. /**
  6. * Desc:基于Spring整合Quartz进行完成定时任务
  7. * Created by hafiz.zhang on 2016/12/11.
  8. */
  9. public class ThirdCron {
  10. private static final Logger logger = LoggerFactory.getLogger(ThirdCron.class);
  11. public void executeJob() {
  12. logger.info("定时任务3进行中.......");
  13. // do something else
  14. }
  15. }

2.在spring配置文件中配置作业类MethodInvokingJobDetailFactoryBean、作业调度的触发方式(触发器)、调度工厂

  1. 1 <beans xmlns="http://www.springframework.org/schema/beans"
  2. 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. 3 xsi:schemaLocation="http://www.springframework.org/schema/beans
  4. 4 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
  5. 5
  6. 6 <bean name="thirdCron" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  7. 7 <property name="targetObject">
  8. 8 <bean class="com.hafiz.www.cron.ThirdCron"/>
  9. 9 </property>
  10. 10 <property name="targetMethod" value="executeJob"/>
  11. 11 <!--作业不并发调度-->
  12. 12 <property name="concurrent" value="false"/>
  13. 13 </bean>
  14. 14
  15. 15 <!--按照一定频率的触发器-->
  16. 16 <!--<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
  17. 17 <property name="jobDetail" ref="thirdCron"/>
  18. 18 <property name="startDelay" value="0"/>
  19. 19 <property name="repeatInterval" value="2000"/>
  20. 20 </bean>-->
  21. 21
  22. 22 <!--Cron表达式触发器-->
  23. 23 <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
  24. 24 <property name="jobDetail" ref="thirdCron"/>
  25. 25 <property name="cronExpression" value="0/5 * * * * ?"/>
  26. 26 </bean>
  27. 27
  28. 28 <!--配置调度工厂-->
  29. 29 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  30. 30 <property name="triggers">
  31. 31 <list>
  32. 32 <!--<ref bean="simpleTrigger"/>-->
  33. 33 <ref bean="cronTrigger"/>
  34. 34 </list>
  35. 35 </property>
  36. 36 </bean>
  37. 37 </beans>

注意:MethodInvokingJobDetailFactoryBean,有两个关键属性:

    targetObject指定任务类.

    targetMethod指定运行的方法.

3.运行结果

  

Spring整合Quartz轻松完成定时任务的更多相关文章

  1. 使用Spring整合Quartz轻松完成定时任务

    一.背景 上次我们介绍了如何使用Spring Task进行完成定时任务的编写,这次我们使用Spring整合Quartz的方式来再一次实现定时任务的开发,以下奉上开发步骤及注意事项等. 二.开发环境及必 ...

  2. Spring 整合 Quartz 实现动态定时任务

    复制自:https://www.2cto.com/kf/201605/504659.html 最近项目中需要用到定时任务的功能,虽然Spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能 ...

  3. 【转】Spring 整合 Quartz 实现动态定时任务

    http://blog.csdn.net/u014723529/article/details/51291289 最近项目中需要用到定时任务的功能,虽然spring 也自带了一个轻量级的定时任务实现, ...

  4. Spring 整合 Quartz 实现动态定时任务(附demo)

    最近项目中需要用到定时任务的功能,虽然Spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之后,决定整合更为专业的Quartz来实现定时任务功能. 普通定时任务 首先 ...

  5. Spring 整合 Quartz框架(定时任务)

    Maven 无法下载 Quartz 依赖,去官网下载 http://www.quartz-scheduler.org/downloads/ Quartz 官方手册:https://www.w3csch ...

  6. Spring 3整合Quartz 2实现定时任务--转

    常规整合 http://www.meiriyouke.net/?p=82 最近工作中需要用到定时任务的功能,虽然Spring3也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之 ...

  7. Spring整合Quartz定时任务执行2次,Spring定时任务执行2次

    Spring整合Quartz定时任务执行2次,Spring定时任务执行2次 >>>>>>>>>>>>>>>&g ...

  8. Spring整合Quartz定时任务 在集群、分布式系统中的应用(Mysql数据库环境)

    Spring整合Quartz定时任务 在集群.分布式系统中的应用(Mysql数据库环境)   转载:http://www.cnblogs.com/jiafuwei/p/6145280.html 单个Q ...

  9. 【淘淘】Spring整合Quartz框架

    我在外面工作实习的时候,我们做的项目是一个日报子系统,也就是定时定点为公司生成一些报表数据还有一些数据反馈.这时候我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.当时,我做 ...

随机推荐

  1. Beautifulsoup网页解析——爬取豆瓣排行榜分类接口

    我们在网页爬取的过程中,会通过requests成功的获取到所需要的信息,而且,在返回的网页信息中,也是通过HTML代码的形式进行展示的.HTML代码都是通过固定的标签组合来实现页面信息的展示,所以,最 ...

  2. ZooKeeper 分布式锁 Curator 源码 03:可重入锁并发加锁

    前言 在了解了加锁和锁重入之后,最需要了解的还是在分布式场景下或者多线程并发加锁是如何处理的? 并发加锁 先来看结果,在多线程对 /locks/lock_01 加锁时,是在后面又创建了新的临时节点. ...

  3. Hive——环境搭建

    Hive--环境搭建 相关hadoop和mysql环境已经搭建好.我博客中也有相关搭建的博客. 一.下载Hive并解压到指定目录(本次使用版本hive-1.1.0-cdh5.7.0,下载地址:http ...

  4. python之数据驱动yaml操作

    Mail163.yaml配置文件如下: login_data: url : 'https://mail.163.com/'case1: user : '' passwd : '' errorText ...

  5. Requests方法 --- json模块

    1.Json 简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式,常用于 http 请求中 2.可以用 help(json),查看对应的源码注释内容 ...

  6. C++:数据类型

    /** * C++ 数据类型 : https://www.runoob.com/cplusplus/cpp-data-types.html * * 布尔: bool * 字符: char 1 个字节 ...

  7. 5Java基础整理

    1.API:Application programming interface 举例:System类中的 public static void arraycopy(int[] src,int srcP ...

  8. jvm源码解读--10 enum WKID 枚举

    源码中对于枚举类型WKID的使用 static bool initialize_wk_klass(WKID id, int init_opt, TRAPS); static void initiali ...

  9. 字符串对象 API

    length--获取字符串的长度 charAt(n)--查找下标对应的字符串 indexOf(str)--查找某个字符首次出现的下标,找不到返回-1 lastIndexOf(str)--查找某个字符最 ...

  10. Linux 基础指令初识

    Linux 基础指令初识 01. ls 指令 语法: ls [选项] [目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件.对于文件,将列出文件名以及其他信息 -a 列出目录下的所有文 ...