Spring中Quartz调度器的使用 ----继承QuartzJobBean,不继承QuartzJobBean两种方式
一、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两种方式相关推荐
- Spring中Quartz调度器的使用
一.Quartz的特点 * 按作业类的继承方式来分,主要有以下两种: 1.作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式 2. ...
- Linux中vim编辑文件显示行号(临时和永久两种方式)
一.前言 在Linux中经常使用vim编辑器去修改文件,默认是不显示行号的,那如何显示呢?有临时和永久两种方式. 本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错, ...
- Unity中传入任意数,转换成分,秒,并进行倒计时换算..(两种方式)
第一种方式是利用Unity中的协程,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngin ...
- (转)spring中的拦截器(HandlerInterceptor+MethodInterceptor)
1. 过滤器跟拦截器的区别 在说拦截器之前,不得不说一下过滤器,有时候往往被这两个词搞的头大. 其实我们最先接触的就是过滤器,还记得web.xml中配置的<filter>吗~ 你应该知道 ...
- 谈谈spring中的拦截器interceptor
谈谈spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们验证是否登陆.预先设置数据以及统计方法的执行效率等等.今天就来详细的谈一下spring中的拦截器.spring中拦截器主 ...
- Spring中的拦截器
1.Spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们预先设置数据以及统计方法的执行效率等等. 今天就来详细的谈一下spring中的拦截器.spring中拦截器主要分两种,一 ...
- Spring中的拦截器的作用
Spring中的拦截器的作用 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 用户可以自己定义一些拦截器来实现特定的功能. 谈到拦截器 ...
- spring中AOP动态代理的两种方式
AOP动态代理的两种方式 Spring AOP动态代理的方式(spring的AOP默认是JDK Proxy) 浅谈这两种动态代理 JDK的动态代理,需要有实现接口 动态代理--JDK Proxy ⚫ ...
- Spring中进行事务管理的两种方式
1.Spring中事务管理的API 事务是指逻辑上要么全部成功.要么全部失败的一组操作.例如用户A给用户B转账,则用户A账户余额减少.用户B账户增加这两个操作就是一组事务,必须全部成功或失败撤回操作, ...
最新文章
- Linux的文件和目录命令 linux系列⑤
- 乐鑫代理启明云端分享|ESP32系列教程之三: VS Code远程连接Linux
- 计算机制图实训心得体会,绘图实训心得体会
- COGS182 [USACO Jan07] 均衡队形[RMQ]
- Dev TextEdit 输入提示
- Python Tkinter之variable用法
- pom报错如何解决(org.apache.maven.archiver.mavenarchiver.getmanifest)
- 吐槽Javascript系列三:数组的陷阱
- Atitit 写的计算机技术类的书 与it类紧密的学科 atiitt it学科体系化 体系树与知识点概念大总结 v3 t88.xlsx 门类	学科一级分类	专业、二级学科分类	课程 书籍 工学
- 计算机教学提问的观课量表,观课议课|如何使用观察和记录量表
- 运营方法 - 运营的思考方法
- 如何提高maven的编译速度
- 如何绕过强制门户——克隆 MAC 地址
- 为什么有斯坦福计算机科学博士学位的你找不到工作?
- 2073:【例2.16 】三角形面积
- java代码视频数据和音频数据的采集
- 进程的通信 - 剪切板
- 获取电脑cpu,硬盘,网卡序列号
- P2P(点到点-点对点)通信实现实例
- 计网真题:信道利用率计算