一、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

另外:http://blog.csdn.net/yefriendly/article/details/2490789对于spring的quartz定时器描述也较为详细

Spring中Quartz调度器的使用相关推荐

  1. Spring中Quartz调度器的使用 ----继承QuartzJobBean,不继承QuartzJobBean两种方式

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

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

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

  3. 谈谈spring中的拦截器interceptor

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

  4. Spring中的拦截器

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

  5. Spring中的拦截器的作用

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

  6. Quartz调度器学习--基本概念

    1,触发器有一个startTime 和 endTime 属性,startTime 规定Trigger何时生效,endTime规定Trigger何时失效. 2,Trigger的优先级:Quartz管理着 ...

  7. 关于quartz调度器

    关于调度器: 主要作用:按照一定时间规律,或者到指定的时间来执行一些特殊的操作 主要: org.springframework.scheduling.quartz.QuartzJobBean 来源于: ...

  8. MySQL中的调度器

    MySQL中的事件调度器是MySQL 5.1版本才新增的功能,可以将数据库按照规定的时间周期对数据库做增加.删除.修改等操作. 1.MySQL中查看数据库版本的命令: SELECT VERSION() ...

  9. [置顶] Spring中DI设置器注入

    Java的反射机制可以说是在Spring中发挥的淋漓尽致,下面要看的代码就是通过反射机制来实现向一个类注入其实际依赖的类型,这个过程的实现会交由Spring容器来帮我们完成. JavaBean中针对属 ...

最新文章

  1. 【第41题】【062题库】2019年OCP认证062考试新题
  2. mysql和SQLYog工具使用
  3. Android全局修改字体大小,Android 仿微信全局字体大小调整
  4. session存入redis或memcached
  5. Android NDK学习笔记1:基础
  6. 苹果开发几个常见的错误
  7. mongo数据库插入数据_深入研究Mongo数据库
  8. 【源码更新】活动报名登记预约问卷表单系统微信小程序支持导入导出自定义表单填报字段
  9. xtreme toolkit pro——CXTPReportControl控件教程
  10. Java io流文件读取和写入
  11. 优酷Android包瘦身治理思路
  12. 腾讯2017年度代码报告:程序员15500人、年撸码5亿行、手Q代码已过百万行
  13. 迅雷快车旋风链接转换成普通链接工具
  14. 9 mybatis中使用Java8的日期LocalDate、LocalTime、LocalDateTime
  15. spring cloudAlibaba gateway网关报错,显示无法找到注册中心注册自己。
  16. 格签名相似概念区分: SVP、SIS、LWE的区分
  17. [词性] 七、冠词二 [不使用冠词的场合]
  18. Spring Cloud Gateway 整合 knife4j 聚合接口文档
  19. 【面试题笔记-Java】MySQL数据库、索引、MVCC等知识点(自己整理)
  20. ubuntu里的桌面便签工具

热门文章

  1. FPGA基础之VGA(一)满屏红色
  2. 员工在vivo年薪78万,加班太多想辞职去国企,国企工资以为看错了
  3. 不要指望别人能照亮自己,而是要内心自带光源,同时可以照亮他人。
  4. 图像分割 - 水平集算法
  5. 给大家收集了一些C语言代码优化的方法
  6. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园招聘管理系统968b0
  7. 《C语言实战教学》:输入输出函数及数据类型
  8. 高效运维11问 (有幸得与惠普HPE高级顾问一次交心)
  9. 从计算到智算,计算产业掀起什么样的浪潮?
  10. 【无标题】star rain