- 浏览: 1884768 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (514)
- OPEN (41)
- WARN (33)
- EXPER (16)
- RESOURCE (7)
- TOOL (4)
- DWR (10)
- Struts1.x (10)
- Ibtais (18)
- MyEclipse (30)
- Sql Server (64)
- Tomcat (7)
- APACHE (4)
- JSP (18)
- SERVLET (6)
- ENGLISH (0)
- ECSide (8)
- JasperReports (7)
- JAVA (24)
- JS (42)
- XML (26)
- CVS (8)
- Mind (1)
- JQUERY (2)
- IBATIS (6)
- PROJECT (0)
- STRUTS2 (0)
- PROXOOL (0)
- SPRING (4)
- Hibernate (0)
- SSI (0)
- JBPM (11)
- FLEX (3)
- JSON (2)
- GWT (1)
- jeecms v3 (1)
- Flash (2)
- DATA (1)
- ORACLE (3)
- 查询oracle 中逗号分隔字符串中所有值 (1)
最新评论
-
小小西芹菜:
GoEasy web三步轻松实现web实时推送1. 引入goe ...
服务器推送技术 java -
kg_1997:
这个方法太棒了,可以不用to_date函数,实在是棒!!!
java/oracle日期处理 -
wodesunday:
:idea:
SQL的分段统计查询语句 -
wodesunday:
引用
SQL的分段统计查询语句 -
BlueSkator:
讲的有点浅,没有深入进去
tomcat需要的重新发布和重启服务器的几种情况
Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便。
一、核心概念
Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。
1、Job
表示一个工作,要执行的具体内容。此接口中只有一个方法
void execute(JobExecutionContext context)
2、JobDetail
JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
3、Trigger代表一个调度参数的配置,什么时候去调。
4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
二、一个最简单入门实例
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.Date;
/**
* quartz定时器测试
*
* @author leizhimin 2009-7-23 8:49:01
*/
public class MyJob implements Job {
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println(new Date() + ": doing something...");
}
}
class Test {
public static void main(String[] args) {
//1、创建JobDetial对象
JobDetail jobDetail = new JobDetail();
//设置工作项
jobDetail.setJobClass(MyJob.class);
jobDetail.setName("MyJob_1");
jobDetail.setGroup("JobGroup_1");
//2、创建Trigger对象
SimpleTrigger strigger = new SimpleTrigger();
strigger.setName("Trigger_1");
strigger.setGroup("Trigger_Group_1");
strigger.setStartTime(new Date());
//设置重复停止时间,并销毁该Trigger对象
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis() + 1000 * 1L);
strigger.setEndTime(c.getTime());
strigger.setFireInstanceId("Trigger_1_id_001");
//设置重复间隔时间
strigger.setRepeatInterval(1000 * 1L);
//设置重复执行次数
strigger.setRepeatCount(3);
//3、创建Scheduler对象,并配置JobDetail和Trigger对象
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = null;
try {
scheduler = sf.getScheduler();
scheduler.scheduleJob(jobDetail, strigger);
//4、并执行启动、关闭等操作
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
// try {
// //关闭调度器
// scheduler.shutdown(true);
// } catch (SchedulerException e) {
// e.printStackTrace();
// }
}
}
执行结果:
当把结束时间改为:
//设置重复停止时间,并销毁该Trigger对象
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis() + 1000 * 1L);
strigger.setEndTime(c.getTime());
执行结果:
当添加一条关闭调度器的语句:
//4、并执行启动、关闭等操作
scheduler.start();
scheduler.shutdown(true);
程序执行结果:
Thu Jul 23 10:11:50 CST 2009: doing something...
Process finished with exit code 0
仅仅执行了一次,这一次能执行完,原因是设定了scheduler.shutdown(true);true表示等待本次任务执行完成后停止。
从这里也可以看出,scheduler是个容器,scheduler控制jobDetail的执行,控制的策略是通过trigger。
当scheduler容器启动后,jobDetail才能根据关联的trigger策略去执行。当scheduler容器关闭后,所有的jobDetail都停止执行。
三、透过实例看原理
通过研读Quartz的源代码,和本实例,终于悟出了Quartz的工作原理。
1、scheduler是一个计划调度器容器(总部),容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。
2、JobDetail是一个可执行的工作,它本身可能是有状态的。
3、Trigger代表一个调度参数的配置,什么时候去调。
4、当JobDetail和Trigger在scheduler容器上注册后,形成了装配好的作业(JobDetail和Trigger所组成的一对儿),就可以伴随容器启动而调度执行了。
5、scheduler是个容器,容器中有一个线程池,用来并行调度执行每个作业,这样可以提高容器效率。
6、将上述的结构用一个图来表示,如下:
四、总结
1、搞清楚了上Quartz容器执行作业的的原理和过程,以及作业形成的方式,作业注册到容器的方法。就认识明白了Quartz的核心原理。
2、Quartz虽然很庞大,但是一切都围绕这个核心转,为了配置强大时间调度策略,可以研究专门的CronTrigger。要想灵活配置作业和容器属性,可以通过Quartz的properties文件或者XML来实现。
3、要想调度更多的持久化、结构化作业,可以通过数据库读取作业,然后放到容器中执行。
4、所有的一切都围绕这个核心原理转,搞明白这个了,再去研究更高级用法就容易多了。
5、Quartz与Spring的整合也非常简单,Spring提供一组Bean来支持:MethodInvokingJobDetailFactoryBean、SimpleTriggerBean、SchedulerFactoryBean,看看里面需要注入什么属性即可明白了。Spring会在Spring容器启动时候,启动Quartz容器。
6、Quartz容器的关闭方式也很简单,如果是Spring整合,则有两种方法,一种是关闭Spring容器,一种是获取到SchedulerFactoryBean实例,然后调用一个shutdown就搞定了。如果是Quartz独立使用,则直接调用scheduler.shutdown(true);
7、Quartz的JobDetail、Trigger都可以在运行时重新设置,并且在下次调用时候起作用。这就为动态作业的实现提供了依据。你可以将调度时间策略存放到数据库,然后通过数据库数据来设定Trigger,这样就能产生动态的调度。
发表于 @ 2009年09月03日 22:41:00 | 评论( 2 ) | 编辑| 举报| 收藏
旧一篇:JAVA 连接MSSQL2005 注意问题 | 新一篇:Quartz实例
查看最新精华文章 请访问博客首页相关文章
Quartz,企业级的计划/日程安排(job schedule)系统(1)-介绍Quartz不能直接使用已有对象实例的解决办法quartz用编程方式调用的实例《pro Spring》学习笔记之使用Spring配置Quartzjava quartz我对quartz的一点认识Quartz入门到精通Quartz 框架快速入门(一)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/h2731667843/archive/2009/09/03/4517130.aspx
一、核心概念
Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。
1、Job
表示一个工作,要执行的具体内容。此接口中只有一个方法
void execute(JobExecutionContext context)
2、JobDetail
JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
3、Trigger代表一个调度参数的配置,什么时候去调。
4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
二、一个最简单入门实例
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.Date;
/**
* quartz定时器测试
*
* @author leizhimin 2009-7-23 8:49:01
*/
public class MyJob implements Job {
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println(new Date() + ": doing something...");
}
}
class Test {
public static void main(String[] args) {
//1、创建JobDetial对象
JobDetail jobDetail = new JobDetail();
//设置工作项
jobDetail.setJobClass(MyJob.class);
jobDetail.setName("MyJob_1");
jobDetail.setGroup("JobGroup_1");
//2、创建Trigger对象
SimpleTrigger strigger = new SimpleTrigger();
strigger.setName("Trigger_1");
strigger.setGroup("Trigger_Group_1");
strigger.setStartTime(new Date());
//设置重复停止时间,并销毁该Trigger对象
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis() + 1000 * 1L);
strigger.setEndTime(c.getTime());
strigger.setFireInstanceId("Trigger_1_id_001");
//设置重复间隔时间
strigger.setRepeatInterval(1000 * 1L);
//设置重复执行次数
strigger.setRepeatCount(3);
//3、创建Scheduler对象,并配置JobDetail和Trigger对象
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = null;
try {
scheduler = sf.getScheduler();
scheduler.scheduleJob(jobDetail, strigger);
//4、并执行启动、关闭等操作
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
// try {
// //关闭调度器
// scheduler.shutdown(true);
// } catch (SchedulerException e) {
// e.printStackTrace();
// }
}
}
执行结果:
当把结束时间改为:
//设置重复停止时间,并销毁该Trigger对象
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis() + 1000 * 1L);
strigger.setEndTime(c.getTime());
执行结果:
当添加一条关闭调度器的语句:
//4、并执行启动、关闭等操作
scheduler.start();
scheduler.shutdown(true);
程序执行结果:
Thu Jul 23 10:11:50 CST 2009: doing something...
Process finished with exit code 0
仅仅执行了一次,这一次能执行完,原因是设定了scheduler.shutdown(true);true表示等待本次任务执行完成后停止。
从这里也可以看出,scheduler是个容器,scheduler控制jobDetail的执行,控制的策略是通过trigger。
当scheduler容器启动后,jobDetail才能根据关联的trigger策略去执行。当scheduler容器关闭后,所有的jobDetail都停止执行。
三、透过实例看原理
通过研读Quartz的源代码,和本实例,终于悟出了Quartz的工作原理。
1、scheduler是一个计划调度器容器(总部),容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。
2、JobDetail是一个可执行的工作,它本身可能是有状态的。
3、Trigger代表一个调度参数的配置,什么时候去调。
4、当JobDetail和Trigger在scheduler容器上注册后,形成了装配好的作业(JobDetail和Trigger所组成的一对儿),就可以伴随容器启动而调度执行了。
5、scheduler是个容器,容器中有一个线程池,用来并行调度执行每个作业,这样可以提高容器效率。
6、将上述的结构用一个图来表示,如下:
四、总结
1、搞清楚了上Quartz容器执行作业的的原理和过程,以及作业形成的方式,作业注册到容器的方法。就认识明白了Quartz的核心原理。
2、Quartz虽然很庞大,但是一切都围绕这个核心转,为了配置强大时间调度策略,可以研究专门的CronTrigger。要想灵活配置作业和容器属性,可以通过Quartz的properties文件或者XML来实现。
3、要想调度更多的持久化、结构化作业,可以通过数据库读取作业,然后放到容器中执行。
4、所有的一切都围绕这个核心原理转,搞明白这个了,再去研究更高级用法就容易多了。
5、Quartz与Spring的整合也非常简单,Spring提供一组Bean来支持:MethodInvokingJobDetailFactoryBean、SimpleTriggerBean、SchedulerFactoryBean,看看里面需要注入什么属性即可明白了。Spring会在Spring容器启动时候,启动Quartz容器。
6、Quartz容器的关闭方式也很简单,如果是Spring整合,则有两种方法,一种是关闭Spring容器,一种是获取到SchedulerFactoryBean实例,然后调用一个shutdown就搞定了。如果是Quartz独立使用,则直接调用scheduler.shutdown(true);
7、Quartz的JobDetail、Trigger都可以在运行时重新设置,并且在下次调用时候起作用。这就为动态作业的实现提供了依据。你可以将调度时间策略存放到数据库,然后通过数据库数据来设定Trigger,这样就能产生动态的调度。
发表于 @ 2009年09月03日 22:41:00 | 评论( 2 ) | 编辑| 举报| 收藏
旧一篇:JAVA 连接MSSQL2005 注意问题 | 新一篇:Quartz实例
查看最新精华文章 请访问博客首页相关文章
Quartz,企业级的计划/日程安排(job schedule)系统(1)-介绍Quartz不能直接使用已有对象实例的解决办法quartz用编程方式调用的实例《pro Spring》学习笔记之使用Spring配置Quartzjava quartz我对quartz的一点认识Quartz入门到精通Quartz 框架快速入门(一)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/h2731667843/archive/2009/09/03/4517130.aspx
发表评论
-
Apache FileUpload组件
2013-11-22 15:05 5453Apache FileUpload组件 在最初的 htt ... -
各种数据库对应的jar包、驱动类名和URL格式
2012-11-20 16:38 1522各种数据库对应的jar包、驱动类名和URL格式 2011 ... -
Java Web Start
2011-09-14 10:45 1355一.首先了解一下什么是java web start 1JNL ... -
The template at a glance一目了然的模板
2011-08-05 09:06 1503The template at a glance一目了然的模板 ... -
FreeMarker
2011-08-05 09:04 1132一目了然的数据模型 As you have seen, th ... -
jeecms v3
2011-07-04 15:28 1575好久没有逛jeecms的官方论坛了,今天去看了下,jeecms ... -
gwt整合ibatis
2011-07-02 09:42 2089最近整合gwt整合ibatis,常见错误 控制台报错: 一.N ... -
GWT RPC原理浅析(二)
2011-06-17 16:14 2859前一篇介绍了RPC大体的流程,核心方法是RemoteServi ... -
GWT RPC原理浅析
2011-06-17 15:26 5337GWT中前后台交互有多种方式,包括JSON,XML,RPC 其 ... -
五种开源协议
2011-04-25 14:54 1120五种开源协议(BSD,Apache,G ... -
JAVA代码调用客户端摄像头 初步探讨
2011-02-21 16:51 6764首先到sun下载最新的jmf,然后安装。 然后,说一下 ... -
tomcat部署jbpm项目 loader constraint violation
2011-02-11 14:22 1806当tomcat部署jbpm项目 时,启动项目控制台出错 ja ... -
E3.Tree参考手册
2010-12-10 09:52 3586E3.Tree参考手册 (v1.0) 目录 简介 2 系统 ... -
e3.tree 1.5 发布,很好,很强大,有截图[转]
2010-12-07 14:14 1145E3.Tree是E3平台下一个用于构造树型UI(menu,tr ... -
在Action中获取ServletContext实例
2010-11-25 13:43 37741:在Action中获取servletContext的时候可以 ... -
Bean named 'sqlMapClient' must be of type [org.springframework.orm.ibatis.SqlMap
2010-11-22 09:57 4952在整合spring2.5和ibatis2,出现了ibatis的 ... -
spring,ibatis的笔记
2010-11-22 08:51 1051在上文中,我们把iface ... -
spring,ibatis的笔记
2010-11-22 08:51 978在上文中,我们把iface ... -
后台错误处理
2010-11-17 15:10 1332后台处理 if (!isTokenValid(request) ... -
struts1 和Spring整合jar包
2010-11-17 11:33 5020struts1 和Spring整合 struts1 和Spri ...
相关推荐
### 深入解读Quartz的原理 #### 一、Quartz概述 Quartz 是一个功能强大且易于使用的 Java 开源定时任务调度器。它能够触发在指定的时间执行任务(通常称为作业)。Quartz 能够满足从简单的到非常复杂的业务场景...
Quartz原理及实例,spring4.x+Quartz.2.2.1结合的开发,静态和动态实例
通过阅读《Quartz学习.doc》和《Quartz学习.ppt》,你可以更深入地了解Quartz的原理、配置、使用示例和最佳实践,进一步提升你在Web开发中的任务调度能力。文档中可能还会涵盖如何处理Job执行异常、如何设置Job依赖...
quartz工作原理
博主的博客可能深入到以上某个或多个方面,通过阅读源码来揭示Quartz的工作原理,帮助读者理解如何根据业务需求定制和优化Quartz的使用。如果你想要深入理解Quartz,阅读源码确实是一个很好的途径,它能让你洞察到...
在1.8.4这个版本中,用户可以获取到官方的原始代码、编译后的jar包以及官方提供的示例,这为开发者提供了深入理解Quartz工作原理和实践应用的宝贵资源。 Quartz的核心特性包括: 1. **灵活的任务调度**:Quartz...
本文将深入探讨 Quartz 线程池的工作原理、配置以及如何在实际项目中应用。 ### 一、Quartz 线程池的基本概念 线程池是计算机科学中的一个概念,主要用于管理多个并发运行的线程。在 Quartz 中,线程池负责处理由 ...
在MyEclipse 6.0.1环境下,你可以直接运行这个Spring整合Quartz的示例项目,以便深入学习Quartz的调度功能。 Quartz的核心概念包括: 1. **Job**:工作,它是实际要执行的任务,可以定义一个Java类实现`org.quartz....
在Spring框架中集成Quartz是一款常见的任务调度解决方案,它允许开发者在应用中安排定时任务的执行。Quartz是一个开源的作业调度框架,可以用来在Java应用程序中安排复杂的作业任务。以下将详细介绍如何在Spring中...
学习和理解这个源码包,可以帮助你深入理解Quartz的工作原理,以及如何在实际项目中灵活运用。通过分析和实践,你可以掌握如何创建动态任务,如何根据业务需求调整任务执行策略,以及如何进行错误处理和监控。这将对...
Quartz的工作原理是通过定义Job(任务)和Trigger(触发器)来安排任务。Job是实际执行的任务,而Trigger则定义了何时启动这个任务。你可以创建自定义的Job类来实现特定业务逻辑,并通过Trigger设置触发时间,如每天...
Quartz 是一个开源的作业调度框架,广泛应用于Java应用程序中,用于执行定时任务。它提供了丰富的API和灵活性,使得开发者可以方便地定义、安排和管理各种任务。版本1.8.6是Quartz的一个稳定版本,它包含了对数据库...
Quartz和Spring-Quartz是两个在Java世界...“spring-quartz-demo”可能是一个完整的示例项目,你可以通过运行它来深入理解Quartz在Spring中的应用。通过研究这些资源,你可以更全面地掌握Quartz和Spring-Quartz的用法。
Quartz是Java领域的一款强大的开源任务调度框架,它允许开发者创建和管理定时任务,从而实现应用程序的自动执行功能。在给定的压缩包文件中,我们有两个版本为1.6.0的Quartz JAR包:`quartz-1.6.0.jar`和`quartz-all...
7. **src**:源代码目录,包含Quartz.NET的源码,开发者可以查看和学习其内部工作原理。 8. **lib**:库文件夹,可能包含Quartz.NET依赖的外部库。 9. **doc**:文档目录,可能有API参考、用户指南等帮助材料。 *...
通过学习和运行这个实例,你可以深入理解Quartz的工作原理,并将其应用到自己的项目中,实现定时任务的自动化调度。确保根据你的项目需求调整触发器和作业的设置,以及正确配置Quartz以适应你的环境。
### Java框架介绍: Quartz从入门到进阶 ...无论是对于初学者还是有经验的开发者来说,Quartz都是一个值得深入学习和使用的工具。通过对Quartz的学习和实践,可以大大提高开发效率并为项目带来更高的稳定性和可靠性。
通过`quartz-1.4.5-sources.jar`,我们可以深入理解Quartz的内部工作原理。例如: - `org.quartz.Job`接口是所有任务类的基类,你需要实现它的execute方法来定义任务逻辑。 - `org.quartz.Trigger`接口定义了触发器...
下面我们将深入探讨如何在Android Studio中集成并使用Quartz。 ### 1. Quartz简介 Quartz是Java平台上的一个全面且功能强大的任务调度库,它支持程序化和声明式的任务调度。Quartz的核心特性包括: - 定时器:...