- 浏览: 221192 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
Wangwei86609:
非常好的规则引擎框架,支持决策树和多线程运行规则https:/ ...
规则引擎 -
hzxlb910:
真详细,收藏哈
maven setting.xml配置说明 -
东方胜:
[b][/b]
脚本语言 Tcl -
345161974:
hyw520110 写道345161974 写道这个Visua ...
Visual Tcl Binary 完整版(完美中文支持) -
hyw520110:
345161974 写道这个Visual Tcl Binary ...
Visual Tcl Binary 完整版(完美中文支持)
一、java.util.Timer 首先实例化一个 SchedulerFactory,获得调度器。创建 JobDetail 对象时,它的构造函数要接受一个 Job 作为参数。SimpleTrigger 是一个简单的触发器。在创建对象之后,设置几个基本属性以立即调度任务,然后每 10 秒重复一次,直到作业被执行 100 次。 Cron触发器 CronTrigger 支持比 SimpleTrigger 更具体强大的调度,实现起来却不是很复杂。CronTrigger基于 cron 表达式,支持类似日历的重复间隔更为复杂的调度时间上的要求。 Cron 表达式包括以下 7 个字段: Cron 触发器利用一系列特殊字符,如下所示: 所有这些定义看起来可能有些吓人,但是只要几分钟练习之后,cron 表达式就会显得十分简单。 下面的代码显示了 CronTrigger 的一个示例。请注意 SchedulerFactory、Scheduler 和 JobDetail 的实例化,与 SimpleTrigger 示例中的实例化是相同的。在这个示例中,只是修改了触发器。这里指定的 cron 表达式(“0/5 * * * * ?”)安排任务每 5 秒执行一次。 2、spring与Quartz的集成 调度工作 使用SimpleTriggerBean触发器 使用CronTriggerBean触发器
在Java中有一个任务处理类java.util.Timer,非常方便于处理由时间触发的事件任务,只需建立一个继承java.util.TimerTask的子类,重载父类的run()方法实现具体的任务,然后调用Timer的public void schedule(TimerTask task, long delay, long period)方法实现任务的调度。
但是这种方法只能实现简单的任务调度,不能满足任务调度时间比较复杂的需求。比如希望系统在每周的工作日的8:00时向系统用户给出一个提示,这种方法实现起来就困难了,还有更为复杂的任务调度时间要求。
二、Quartz
1、作业
实现 org.quartz.job 接口,实现接口方法 public void execute(JobExecutionContext context) throws JobExecutionException,在这个方法实现具体的作业任务。
代码例子:
execute 方法接受一个 JobExecutionContext 对象作为参数。这个对象提供了作业实例的运行时上下文。它提供了对调度器和触发器的访问,这两者协作来启动作业以及作业的 JobDetail 对象的执行。Quartz 通过把作业的状态放在 JobDetail 对象中并让 JobDetail 构造函数启动一个作业的实例,分离了作业的执行和作业周围的状态。JobDetail 对象储存作业的侦听器、群组、数据映射、描述以及作业的其他属性。
2、触发器
触发器可以实现对任务执行的调度。Quartz 提供了几种不同的触发器,复杂程度各不相同。
简单触发器:
public void task() throws SchedulerException {
// Initiate a Schedule Factory
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve a scheduler from schedule factory
Scheduler scheduler = schedulerFactory.getScheduler();
// current time
long ctime = System.currentTimeMillis();
// Initiate JobDetail with job name, job group, and executable job class
JobDetail jobDetail =
new JobDetail("jobDetail-s1", "jobDetailGroup-s1", SimpleQuartzJob.class);
// Initiate SimpleTrigger with its name and group name
SimpleTrigger simpleTrigger =
new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
// set its start up time
simpleTrigger.setStartTime(new Date(ctime));
// set the interval, how often the job should run (10 seconds here)
simpleTrigger.setRepeatInterval(10000);
// set the number of execution of this job, set to 10 times.
// It will run 10 time and exhaust.
simpleTrigger.setRepeatCount(100);
// set the ending time of this job.
// We set it for 60 seconds from its startup time here
// Even if we set its repeat count to 10,
// this will stop its process after 6 repeats as it gets it endtime by then.
// simpleTrigger.setEndTime(new Date(ctime + 60000L));
// set priority of trigger. If not set, the default is 5
// simpleTrigger.setPriority(10);
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, simpleTrigger);
// start the scheduler
scheduler.start();
}
public void task() throws SchedulerException {
// Initiate a Schedule Factory
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve a scheduler from schedule factory
Scheduler scheduler = schedulerFactory.getScheduler();
// current time
long ctime = System.currentTimeMillis();
// Initiate JobDetail with job name, job group, and executable job class
JobDetail jobDetail =
new JobDetail("jobDetail2", "jobDetailGroup2", SimpleQuartzJob.class);
// Initiate CronTrigger with its name and group name
CronTrigger cronTrigger = new CronTrigger("cronTrigger", "triggerGroup2");
try {
// setup CronExpression
CronExpression cexp = new CronExpression("0/5 * * * * ?");
// Assign the CronExpression to CronTrigger
cronTrigger.setCronExpression(cexp);
} catch (Exception e) {
e.printStackTrace();
}
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, cronTrigger);
// start the scheduler
scheduler.start();
}
三、Spring + Quartz
spring对Java的Timer类和Quartz都提供了一个抽象层,使用我们可以更方便地使用它们。
1、spring与Timer的集成
首先是一个定时器任务
public class EmailReportTask extends TimerTask {
public EmailReportTask() {
}
public void run() {
courseService.sendCourseEnrollmentReport();
}
private CourseService courseService;
public void setCourseService(CourseService courseService) {
this.courseService = courseService;
}
}
spring配置文件中配置EmailReportTask
调度定时器任务
创建一个工作
在spring配置文件的配置EmailReportJob
和quartz对应,Spirng提供了两个触发器SimpleTriggerBean和CronTriggerBean
参考
http://www.ibm.com/developerworks/cn/java/j-quartz/
《Spring in Action》
发表评论
-
pushlet
2012-05-31 14:56 1176基于pushlet的文件监控系统的研究与实现 http ... -
@Transactional spring 配置事务
2012-04-25 11:15 2095@Transactional spring 配置事 ... -
Spring的组件自动扫描机制
2012-04-09 17:47 0Spring将所有的bean都纳入到IOC中创建、管理和维护。 ... -
struts&rest
2012-04-03 00:11 799深入浅出REST http://www.infoq. ... -
文件转码
2011-11-16 09:55 2024工程项目太多,各工程或各文件编码不统一时,可运行本工具类,把工 ... -
安装和使用SpringIDE-------III
2011-07-29 10:40 8642. 编写类文件 · ... -
安装和使用SpringIDE-------II
2011-07-29 10:39 687显示图表,如图: 发表于 @ 2006 ... -
安装和使用SpringIDE
2011-07-29 10:36 1135这篇文章谈谈如何安装与使用SpringIDE。作为辅助Sp ... -
使用AJDT简化AspectJ开发
2011-07-29 10:05 1055面向方面编程(AOP)可用来解决当今的 许多 应用需求 ... -
利用Apache的CLI来处理命令行
2011-05-16 17:02 988CLI是Jakarta Commons中的一个子类。如果你仅仅 ... -
CGlib简单介绍
2011-04-28 08:37 868CGlib概述:cglib(Code Generation L ... -
Java ClassLoader
2011-04-25 18:24 1012当Java编译器编译好.class ... -
Template模式与Strategy模式
2011-04-20 16:23 688template method模式和stra ... -
Ibatis读写CLOB数据
2011-03-21 14:21 1053转载:http://www.iteye.com/topic/7 ... -
轻松构建和运行多线程的单元测试
2011-03-18 22:09 982背景 并行程序 并行程序是指控制计算机系统中两个或多个分别 ... -
Cairngorm3中文简介
2011-03-18 22:07 1029官方原文地址:http://opensource.adobe. ... -
ibator改造之返回数据库注释和数据库分页
2010-12-23 17:24 2244转载:http://www.iteye.com ... -
quatrz 任务监控管理 (2)
2010-10-28 23:28 1448在《Quartz 任务监控管理 (1)》http://www. ... -
Quartz任务监控管理 (1)
2010-10-28 23:27 1316转载:http://sundoctor.iteye.com/b ... -
Quartz 在 Spring 中如何动态配置时间
2010-10-28 23:25 1708转载: http://sundoctor.iteye.com ...
相关推荐
`Quartz Scheduler`是一个开源的作业调度框架,支持复杂的调度逻辑和大量的并发任务。Spring框架可以通过`org.springframework.scheduling.quartz`包与Quartz进行集成。下面是一个使用Quartz的例子: ```java ...
本篇文章将深入探讨Java中的三种主要时间调度实现:`Timer`、`TimerTask`、以及第三方库`Quartz`和`Spring`的定时任务功能。 ### 1. Java `Timer` 和 `TimerTask` `java.util.Timer` 类提供了一个调度任务的方法,...
Quartz 还提供了一种持久化机制,可以将作业和触发器存储在数据库中,即使应用重启,也能恢复之前的状态。此外,Quartz 支持集群环境,可以在多个节点之间共享任务,提高系统的可用性和可靠性。 Spring 框架与这两...
在Java世界中,任务调度是十分重要的,Spring框架提供了多种定时任务实现方式,其中包括Quartz和Timer。Quartz是一款开源的作业调度框架,而Timer是Java标准库中的一个类,用于执行定时任务。这两个工具都能帮助...
在Spring 2.x版本中,Spring已经提供了对`Timer`和Quartz的集成支持,通过`FactoryBean`进行配置,还包含线程池调度的抽象类,隐藏了底层实现细节。然而,Spring 3.0引入了新的【新特性】,包括声明式模型验证、全面...
Quartz是一个强大的、完全开源的作业调度框架,它可以以JDBC、RAM、文件系统或集群模式存储作业和触发器。在Spring中使用Quartz,可以通过`org.springframework.scheduling.quartz.SchedulerFactoryBean`配置Quartz...
如quartz、jcrontab、JobServer等,在这里我介绍一种比较简单的调度,没有quartz那么复杂,目的在于实用就行,这种调度就是spring提供的调度功能,该调度功能基于quartz+AOP进行实现,我们开始一个例子吧。
Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业...
这包括了创建Spring配置文件,定义作业和触发器,以及编写实际的任务实现类。通过调试通过的实例,你可以更深入地理解这两种调度方式的工作原理和优缺点。 Quartz的优势在于其灵活性和可扩展性,支持复杂的调度策略...
4. **Scheduler**:调度器,是Quartz的核心,负责管理和执行所有的作业和触发器。 **Spring与Quartz的整合:** 1. **Bean注入**:Spring可以将Job类实例化为bean,并将其注入到JobDetail中,这样就能利用Spring的DI...
Spring框架提供了两种方式来处理定时任务:Java内置的`Timer`类和第三方库OpenSymphony的Quartz。下面将详细介绍这两种实现方式。 ### 1. Java `Timer` 类 Java `java.util.Timer` 类是Java标准库中的一个轻量级...
描述中提到"应对不同版本的spring 与quartz定时任务创建所需要的不同的jar包",这意味着此压缩包中包含的 jar 文件可以用于配置和实现基于 Spring 的 Quartz 定时任务。在 Spring 中,Quartz 可以被集成用来执行后台...
Quartz是一个功能强大的开源作业调度框架,它可以与Java应用程序无缝集成,用于执行计划任务。在Spring中集成Quartz,我们首先需要添加Quartz和Spring的相关依赖到项目中。这通常在Maven或Gradle的配置文件中完成。 ...
接下来,配置Quartz的作业和触发器。例如,我们可以创建一个cron触发器,让它每天的1:00执行`DailySay`作业: ```java // Cron表达式 "0 0 1 * * ?" 表示每天的01:00执行 String cronExpression = "0 0 1 * * ?"; ...
Spring 是一个强大的Java应用程序框架,提供了依赖注入、AOP(面向切面编程)以及众多其他功能,而Quartz则是一个开源的作业调度框架,能够用于创建和执行计划任务。 **Spring 3.0** Spring 3.0 是Spring框架的一个...
【Spring 任务调度】是Spring框架中用于自动化执行任务的功能,它允许开发者安排任务在特定时间或间隔执行,...在设计和实现任务调度时,需要注意任务的生命周期管理,避免资源泄漏,同时确保任务的可靠性和准确性。
在Spring框架中集成Quartz,可以方便地创建和管理定时任务,使得开发者无需关注底层调度逻辑,专注于业务逻辑的实现。"quartz-2.1.6.zip"这个压缩包包含了使用Quartz在Spring中构建定时任务所需的各种组件和文档。 ...
在本篇文章中,我们将聚焦于Spring 2.0中的Job以及Quartz这两款工具,探讨它们如何实现定时任务,以及它们与Java内置的`java.util.Timer`类(简称Time)的异同。 首先,让我们从Java自带的`Timer`类开始。`Timer`是...
本文主要探讨了Spring中实现定时任务的三种主要方法:Java的`java.util.Timer`、Quartz库以及Spring自身的Task调度器。 首先,Java的`java.util.Timer`是一个基础的定时任务工具,它可以按照设定的频率执行任务,但...