一、背景

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

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

1.开发环境

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

2.必不可少jar包依赖

 <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>

三、开发步骤

【1】.基于特定基类

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

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

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

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

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

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

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

    1.进入APP,"企业信息"最下面"设备" 2.显示对应的设备的在线或离线 3.点击 >>>,点击"离线",连接蓝牙(手机 ...

  2. python + Poium 库操作

    1.支持pip安装 pip install poium 2.基本用法 from poium import PageElement,Page,PageElements# 1.poium支持的8种定位方法 ...

  3. GCD SUM

    GCD SUM 求 \[\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j) \] 将原式变换得到 \[\sum_{d=1}^nd\sum_{i=1}^{\lfloor\frac{n}{ ...

  4. 【动态规划】合唱队形 luogu-

    分析 做两遍最长上升子序列,在遍历一下,取最大值. AC代码 #include <bits/stdc++.h> using namespace std; #define ms(a,b) m ...

  5. visibility:hidden和display:none的区别

    一.相同点 disable:none和visibility:hidden都能把网页上的某元素隐藏起来 二.不同点 display:none--不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失. ...

  6. python包安装

    python包安装: 一种是有网操作:pip install  包名:例子[pip install setuptools] 无网络服务器上操作: 先把包下载:传上去再安装[] 1.一种是   *.wh ...

  7. 【系统学习ES6】第一节:新的声明方式

    [系统学习ES6] 本专题旨在对ES6的常用技术点进行系统性梳理,帮助大家对其有更好的掌握.计划每周更新1-2篇,希望大家有所收获. 以前用ES5时,声明变量只能用var.ES6的出现,为我们带来了两 ...

  8. 深入刨析tomcat 之---第21篇 tomcat 对jsp页面支持的实现原理

    writedby 张艳涛 web技术,以前的动态网页技术多是jsp页面,比如点击一个菜单目录,直接访问了一个LRJSDetailInput.jsp页面,这个页面 有<html><bo ...

  9. 基于MD5+RSA算法实现接口调用防扯皮级鉴权

    概述 最近项目中需要对第三方开发接口调用,考虑了一下,准备采用MD5+RSA算对请求数据进行签名,来达到请求鉴权,过滤非法请求的目标. 数字签名采用MD5+RSA算法实现.RSA私钥要严格保密并提供安 ...

  10. intouch 开发源程序加密方法

    在先前项目中,因为同行竞争被拷贝走了源程序代码,以至于被上司责备,故而亡羊补牢对intouch(10.1老版本进行源代码加密探索)整理方法如下. 1.intouch wondermarker打开源程序 ...