一、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. WebAssembly Studio:Mozilla提供的WASM工具
  2. 图灵2010.12书讯
  3. Python列表元素操作相关的2个函数和匿名函数
  4. 词法、语法与语义相关知识
  5. 推荐算法--时效性(05)
  6. shell基础05 处理用户输入
  7. linux 查看vnc端口_VNC常用操作及常见问题解决办法汇总
  8. 【请收藏】自动化构建部署之Travis CI使用(GitHub/Travis CI/Vue)
  9. MySql | 为什么大家都在说 Select * 效率低
  10. 432.全O(1)的数据结构
  11. 升讯威周报与工时统计系统 V3
  12. 使用a标签下载文件,解决页面跳转的问题
  13. 数据分析中的常用数学模型实战教程笔记(上)
  14. html制作作业提交入口,制作网页详细操作步骤
  15. 无法出现 Bandizip 的右键菜单
  16. servicecontroller 无法打开计算机 服务,ServiceController似乎无法停止服务
  17. 远程服务器登入信息,怎样查看服务器被远程登录的信息
  18. 织梦dedecms网站地图生成在根目录的开发教程
  19. 天道酬勤-一篇短文却能激励大家!-chinajftang
  20. 质量管理的五大问题和对策|优思学院

热门文章

  1. 20155210潘滢昊 2016-2017-2 《Java程序设计》第5周学习总结
  2. 给大一学生:让积累说话
  3. JSP-详细总结form表单:name= method=post(get) action=
  4. 将CIFAR-10和CIFAR-100数据集处理成“标签文件夹”形式(ImageFolder可读)
  5. 出现了一个意外,不能完你在设置中所要求的更改-修改IPV4地址出错(更新)
  6. 如果你是第一次创业,一定要避免犯这6个致命错误
  7. Java Stream Reduce
  8. 很少人知道但很有用的 Linux 命令
  9. 如何一键换装?换脸换装软件有哪些?
  10. 牛牛的数列(最长连续上升子序)