一、Quartz的特点

作业类的继承方式来分,主要有以下两种:

1.作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式

2.作业类不继承org.springframework.scheduling.quartz.QuartzJobBean类的方式

注:个人比较推崇第二种,因为这种方式下的作业类仍然是POJO。

任务调度的触发时机来分,主要有以下两种:

1.每隔指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.SimpleTriggerBean

2.每到指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.CronTriggerBean

注:这两种触发方式均可以跟两种作业继承方式相互组合来使用。

下面简单演示一下在Spring对Quartz的用法。

二、作业类继承org.springframework.scheduling.quartz.QuartzJobBean类,每到指定时间则触发一次

1.编写作业类

package bean.jobDetailBean;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class Job1 extends QuartzJobBean {

private int timeout;
private static int i = 0;

//调度工厂实例化后,经过timeout时间开始执行调度
public void setTimeout(int timeout) {
this.timeout = timeout;
}

/**
* 要调度的具体任务
*/
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {

System.out.println("继承QuartzJobBean的方式-调度" + ++i + "进行中...");
}
}

2.配置作业类

<!-- 作业使用继承QuartzJobBean的方式  -->
< bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean">
< property name="jobClass" value="bean.jobDetailBean.Job1" />
< property name="jobDataAsMap">
< map>
< entry key="timeout" value="0" />
< /map>
< /property>
< /bean>

3.配置作业调度的触发方式

<!-- 对应于作业继QuartzJobBean类的方式  -->
< bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
< property name="jobDetail" ref="job1" />

< !-- 
"cronExpression"的配置说明

字段   允许值   允许的特殊字符
秒    0-59    , - * /
分    0-59    , - * /
小时    0-23    , - * /
日期    1-31    , - * ? / L W C
月份    1-12 或者 JAN-DEC    , - * /
星期    1-7 或者 SUN-SAT    , - * ? / L C #
年(可选)    留空, 1970-2099    , - * /

- 区间  
* 通配符  
? 你不想设置那个字段
-->

<!-- 每分钟的第0,10,20,30,40,50秒调度一次 -->
< property name="cronExpression" value="0,10,20,30,40,50 * * * * ?" />
< /bean>

4.配置调度工厂

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
< property name="triggers">
< list>
< ref bean="cronTrigger" />
< /list>
< /property>
< /bean>

5.开启调度

package test;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ScheduleTest {

public static void main(String[] args){

BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml");
}
}

6.调度执行的结果

继承QuartzJobBean的方式-调度1进行中...
继承QuartzJobBean的方式-调度2进行中...
继承QuartzJobBean的方式-调度3进行中...
继承QuartzJobBean的方式-调度4进行中...
继承QuartzJobBean的方式-调度5进行中...
继承QuartzJobBean的方式-调度6进行中...
继承QuartzJobBean的方式-调度7进行中...
继承QuartzJobBean的方式-调度8进行中...
继承QuartzJobBean的方式-调度9进行中...

三、作业类不继承org.springframework.scheduling.quartz.QuartzJobBean类,每隔指定时间则触发一次

1.编写作业类

package bean.jobDetailBean;

public class Job2 {

private static int i = 0;

public void doJob2() {

System.out.println("不继承QuartzJobBean方式-调度" + ++i + "进行中...");
}
}

2.配置作业类

<bean id="job2"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
< property name="targetObject">
< bean class="bean.jobDetailBean.Job2" />
< /property>
< property name="targetMethod" value="doJob2" />
< property name="concurrent" value="false" /><!-- 作业不并发调度 -->
< /bean>

3.配置作业调度的触发方式

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
< property name="jobDetail" ref="job2" />
< property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->
< property name="repeatInterval" value="2000" /><!-- 每2秒调度一次 -->
< /bean>

4.配置调度工厂

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
< property name="triggers">
< list>
< ref bean="simpleTrigger" />
< /list>
< /property>
< /bean>

5.开启调度

package test;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ScheduleTest {

public static void main(String[] args){

BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml");
}
}

6.调度执行的结果

不继承QuartzJobBean方式-调度1进行中...
不继承QuartzJobBean方式-调度2进行中...
不继承QuartzJobBean方式-调度3进行中...
不继承QuartzJobBean方式-调度4进行中...
不继承QuartzJobBean方式-调度5进行中...
不继承QuartzJobBean方式-调度6进行中...
不继承QuartzJobBean方式-调度7进行中...
不继承QuartzJobBean方式-调度8进行中...
不继承QuartzJobBean方式-调度9进行中...
不继承QuartzJobBean方式-调度10进行中...

转自:



http://www.cnblogs.com/mguo/archive/2013/01/16/2862921.html

Spring中Quartz调度器的使用 ----继承QuartzJobBean,不继承QuartzJobBean两种方式相关推荐

  1. Spring中Quartz调度器的使用

    一.Quartz的特点 * 按作业类的继承方式来分,主要有以下两种: 1.作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式 2. ...

  2. Linux中vim编辑文件显示行号(临时和永久两种方式)

    一.前言   在Linux中经常使用vim编辑器去修改文件,默认是不显示行号的,那如何显示呢?有临时和永久两种方式.     本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错, ...

  3. Unity中传入任意数,转换成分,秒,并进行倒计时换算..(两种方式)

    第一种方式是利用Unity中的协程,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngin ...

  4. (转)spring中的拦截器(HandlerInterceptor+MethodInterceptor)

    1.  过滤器跟拦截器的区别 在说拦截器之前,不得不说一下过滤器,有时候往往被这两个词搞的头大. 其实我们最先接触的就是过滤器,还记得web.xml中配置的<filter>吗~ 你应该知道 ...

  5. 谈谈spring中的拦截器interceptor

    谈谈spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们验证是否登陆.预先设置数据以及统计方法的执行效率等等.今天就来详细的谈一下spring中的拦截器.spring中拦截器主 ...

  6. Spring中的拦截器

    1.Spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们预先设置数据以及统计方法的执行效率等等. 今天就来详细的谈一下spring中的拦截器.spring中拦截器主要分两种,一 ...

  7. Spring中的拦截器的作用

    Spring中的拦截器的作用 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 用户可以自己定义一些拦截器来实现特定的功能. 谈到拦截器 ...

  8. spring中AOP动态代理的两种方式

    AOP动态代理的两种方式 Spring AOP动态代理的方式(spring的AOP默认是JDK Proxy) 浅谈这两种动态代理 JDK的动态代理,需要有实现接口 动态代理--JDK Proxy ⚫ ...

  9. Spring中进行事务管理的两种方式

    1.Spring中事务管理的API 事务是指逻辑上要么全部成功.要么全部失败的一组操作.例如用户A给用户B转账,则用户A账户余额减少.用户B账户增加这两个操作就是一组事务,必须全部成功或失败撤回操作, ...

最新文章

  1. Linux的文件和目录命令 linux系列⑤
  2. 乐鑫代理启明云端分享|ESP32系列教程之三: VS Code远程连接Linux
  3. 计算机制图实训心得体会,绘图实训心得体会
  4. COGS182 [USACO Jan07] 均衡队形[RMQ]
  5. Dev TextEdit 输入提示
  6. Python Tkinter之variable用法
  7. pom报错如何解决(org.apache.maven.archiver.mavenarchiver.getmanifest)
  8. 吐槽Javascript系列三:数组的陷阱
  9. Atitit 写的计算机技术类的书 与it类紧密的学科 atiitt it学科体系化 体系树与知识点概念大总结 v3 t88.xlsx 门类 学科一级分类 专业、二级学科分类 课程 书籍 工学
  10. 计算机教学提问的观课量表,观课议课|如何使用观察和记录量表
  11. 运营方法 - 运营的思考方法
  12. 如何提高maven的编译速度
  13. 如何绕过强制门户——克隆 MAC 地址
  14. 为什么有斯坦福计算机科学博士学位的你找不到工作?
  15. 2073:【例2.16 】三角形面积
  16. java代码视频数据和音频数据的采集
  17. 进程的通信 - 剪切板
  18. 获取电脑cpu,硬盘,网卡序列号
  19. P2P(点到点-点对点)通信实现实例
  20. 计网真题:信道利用率计算

热门文章

  1. JQuery选择过滤器
  2. DBCO-PEG-IR825|IR825-PEG-DBCO|二苯并环辛炔-聚乙二醇-IR825荧光染料|DBCO-PEG-IR-825荧光染料
  3. 搭建redis高可用:主从、哨兵、集群
  4. YOLOV5识别图标点选验证码
  5. VS源码添加程序集强签名
  6. Java调用高德地图API根据详细地址获取经纬度
  7. 《仙剑奇侠传柔情版》Java的简单实现(二)
  8. Colorama 颜色组合测试
  9. 初中计算机课每学期几节,【精品】初中信息技术教学工作总结三篇
  10. 辣鸡,曝光一波秋招毁约公司!!!