- 浏览: 176127 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
dypt58592:
ssssss
Java调用ocx控件以及dll -
wqy110:
PDFBOX ,提示找不到这个类。
PDFBOX 解析PDF -
pipiaha:
回一楼,在myeclipse里找到 Tasks 的view , ...
myeclipse 中 TODO 注释的用法 -
一帆过海:
...
MySql征程之MyManagerLite开发数据库工具下载 -
q420309528:
多谢,我知道TODO是干什么的,但是不知道怎么找到TODO在哪 ...
myeclipse 中 TODO 注释的用法
简介:
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。
Quartz 的两个基本单元是作业(job)和触发器(trigger)。
作业 是能够调度的可执行任务
触发器 提供了对作业的调度,主要分为SimpleTrigger和Cron Trigger
示例 1:作业
通过实现 org.quartz.job 接口,可以使 Java 类变成可执行的。清单 1 提供了 Quartz 作业的一个示例。这个类用一条非常简单的输出语句覆盖了 execute(JobExecutionContext context) 方法。这个方法可以包含我们想要执行的任何代码
清单1 QuartzJob
示例 2:简单触发器
触发器可以实现对任务执行的调度。Quartz 提供了几种不同的触发器,复杂程度各不相同。清单 2 中的 SimpleTrigger 展示了触发器的基础:
清单2 TestClass
示例 2:复杂触发器
CronTrigger 支持比 SimpleTrigger 更具体的调度,而且也不是很复杂。基于 cron 表达式,CronTrigger 支持类似日历的重复间隔,而不是单一的时间间隔 —— 这相对 SimpleTrigger 而言是一大改进。
Cron 表达式包括以下 7 个字段:
秒
分
小时
月内日期
月
周内日期
年(可选字段)
特殊字符
Cron 触发器利用一系列特殊字符,如下所示:
反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
星号(*)字符是通配字符,表示该字段可以接受任何可能的值。
清单2 TestClass
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。
Quartz 的两个基本单元是作业(job)和触发器(trigger)。
作业 是能够调度的可执行任务
触发器 提供了对作业的调度,主要分为SimpleTrigger和Cron Trigger
示例 1:作业
通过实现 org.quartz.job 接口,可以使 Java 类变成可执行的。清单 1 提供了 Quartz 作业的一个示例。这个类用一条非常简单的输出语句覆盖了 execute(JobExecutionContext context) 方法。这个方法可以包含我们想要执行的任何代码
清单1 QuartzJob
package com.dheaven.demo.quartz; import java.text.SimpleDateFormat; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class QuartzJob implements Job { public void execute(JobExecutionContext arg0) throws JobExecutionException { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(df.format(new Date())+" hi,我是一个job,我要开始执行了。"); } }
示例 2:简单触发器
触发器可以实现对任务执行的调度。Quartz 提供了几种不同的触发器,复杂程度各不相同。清单 2 中的 SimpleTrigger 展示了触发器的基础:
清单2 TestClass
package com.dheaven.demo.quartz; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang.StringUtils; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.junit.Test; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.TriggerUtils; import com.dheaven.demo.pojo.Student; import com.dheaven.framework.util.FileUtils; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; public class TestClass { @Test public void testSimpleJob() { SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); try { Scheduler sched = schedFact.getScheduler(); sched.start(); JobDetail deviceJobDetail = new JobDetail("deviceJob", "massnmp",QuartzJob.class); Trigger deviceTrigger = TriggerUtils.makeSecondlyTrigger(5); deviceTrigger.setStartTime(new Date()); deviceTrigger.setName("deviceTrigger"); sched.scheduleJob(deviceJobDetail, deviceTrigger); deviceJobDetail = new JobDetail("deviceJob2", "massnmp", Job2.class); deviceTrigger = TriggerUtils.makeSecondlyTrigger(9); deviceTrigger.setStartTime(new Date()); deviceTrigger.setName("deviceTrigger2"); sched.scheduleJob(deviceJobDetail, deviceTrigger); } catch (SchedulerException e) { e.printStackTrace(); } while (true) { try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } }
示例 2:复杂触发器
CronTrigger 支持比 SimpleTrigger 更具体的调度,而且也不是很复杂。基于 cron 表达式,CronTrigger 支持类似日历的重复间隔,而不是单一的时间间隔 —— 这相对 SimpleTrigger 而言是一大改进。
Cron 表达式包括以下 7 个字段:
秒
分
小时
月内日期
月
周内日期
年(可选字段)
特殊字符
Cron 触发器利用一系列特殊字符,如下所示:
反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
星号(*)字符是通配字符,表示该字段可以接受任何可能的值。
清单2 TestClass
package com.dheaven.demo.quartz; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang.StringUtils; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.junit.Test; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.TriggerUtils; import com.dheaven.demo.pojo.Student; import com.dheaven.framework.util.FileUtils; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; public class TestClass { @Test public void testCronJob() { SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); try { Scheduler sched = schedFact.getScheduler(); sched.start(); JobDetail deviceJobDetail = new JobDetail("deviceJob", "massnmp",QuartzJob.class); CronTrigger deviceTrigger = new CronTrigger(); deviceTrigger.setCronExpression("30 38 11 * * ?"); deviceTrigger.setStartTime(new Date()); deviceTrigger.setName("deviceTrigger"); sched.scheduleJob(deviceJobDetail, deviceTrigger); } catch (SchedulerException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } while (true) { try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
发表评论
-
Linux 命令总结
2010-10-27 19:22 1380-------文件、目录操作命令---------- ... -
10 个最酷的 Linux 单行命令
2010-10-26 18:22 1530下面是来自 Commandlinefu 网站由用户投票决出的 ... -
java.lang包应用
2010-10-18 19:35 1130String 1.字符串倒序排列; 如:String s ... -
7个致命的 Linux 命令
2010-10-18 18:26 1260如果你是一个 Linux 新手,在好奇心的驱使下,可能会去尝试 ... -
JDK1.5新特性
2010-09-29 18:59 970“JDK1.5”的一个重要主 ... -
强烈推荐几个比较好的Java代码查询网站
2010-07-22 11:37 1114这些是我经常使用的一些Java代码查询网站,希望在这里能起到抛 ... -
Java使用XStream将集合类内容序列化为XML (转)
2010-06-21 17:18 923最近因工作需要,在研究将Collection 生成xml文件, ... -
JXL解析excel
2010-06-18 19:54 1809在进行实践前,我们需要对excel有一个大致的了解,ex ... -
FilenameFilter接口的用法(转)
2010-06-18 15:04 2113使用FilenameFilter实现图片过滤,只要.gif,. ... -
Date、String、Calendar类型之间的转化
2010-05-27 17:25 26281.Calendar 转化 String //获取当前时间的 ... -
svn图解安装教程
2010-05-27 11:13 1463今天在网站上找到了一套非常不错的svn图解安装教程: ... -
Java中各种异常类及其解释
2010-05-25 20:20 1055算术异常类:ArithmeticExecption 空指 ... -
JAVA中使用JCOM和JXL
2010-05-25 10:34 1218在JAVA中使用JCOM和JXL进行Excel编程的注意要点: ... -
Java类的编码和解码
2010-05-21 16:53 965编码: java.net.URLEncoder; pu ... -
java.util.Properties
2010-05-18 23:09 1226Properties 类表示了一个持久的属性集。Propert ... -
JAVA第三方开源库之XStream
2010-05-02 22:43 1309XStream是一个开源项目,利用它可以方便的进行java对象 ... -
JAVA第三方开源库之Dom4j
2010-05-02 22:31 1360DOM4J是dom4j.org出品的一 ... -
Ant
2010-05-01 20:58 868简介: Ant是一种基于java的build工具,有些类 ... -
JAVA之反射机制
2010-05-01 19:46 987i.概念: JAVA反射机制是在运行状态中,对于任意一个 ... -
newInstance()方法和new关键字的区别
2010-05-01 19:26 1705在初始化一个类,生成一个实例的时候,newInstance() ...
相关推荐
在这种情况下,第三方库Quartz就显得尤为出色。 1. **Java内置定时工具** - `java.util.Timer`: 这是一个简单的定时器,可以安排单次或周期性的任务。它通过`TimerTask`类来定义要执行的任务。但是,`Timer`类不是...
Quartz是一款广泛应用于Java环境中的开源任务调度框架,它允许开发者定义、安排和执行复杂的定时任务。这个压缩包包含了Quartz的三个不同版本:1.6.0、1.8.5以及2.2.1。每个版本的jar包都有其特定的功能和改进,下面...
本篇文章将深入探讨Java中的三种主要时间调度实现:`Timer`、`TimerTask`、以及第三方库`Quartz`和`Spring`的定时任务功能。 ### 1. Java `Timer` 和 `TimerTask` `java.util.Timer` 类提供了一个调度任务的方法,...
3. 添加第三方库:Quartz框架需要少数的第三方库,例如Jakarta Commons库等,可以将这些库添加到工程中。 Quartz框架的使用步骤: 1. 创建Job接口实现类:创建一个实现org.quartz.Job接口的Java类,并添加一些逻辑...
Spring框架提供了两种方式来处理定时任务:Java内置的`Timer`类和第三方库OpenSymphony的Quartz。下面将详细介绍这两种实现方式。 ### 1. Java `Timer` 类 Java `java.util.Timer` 类是Java标准库中的一个轻量级...
同时,还需要将 `/lib/core` 和 `/lib/optional` 目录下的第三方库引入,这些通常是 Jakarta Commons 库。Quartz 的配置主要通过 `quartz.properties` 文件完成,其中可以设置数据库连接、线程池大小等参数。 ...
为了使用Quartz框架,首先需要创建一个Java工程,并在项目中添加Quartz的核心库以及其他必要的第三方库。这些库通常位于`<QUARTZ_HOME>/lib/core`和`<QUARTZ_HOME>/lib/optional`目录下,例如`quartz-<version>.jar`...
3. **Quartz Jar包**:压缩包内的lib目录包含了Quartz运行所需的五个jar包,这些包包含了Quartz的核心库、依赖的第三方库,如SLF4J用于日志记录,可能还有其他的库如Apache Commons Lang或Commons Logging等。...
除此之外,根据你的需求,可能还需要其他第三方库,例如Commons Digester,它位于<QUARTZ_HOME>/lib/core和<QUARTZ_HOME>/lib/optional目录下。如果遇到与事务管理相关的错误,如`java.lang.NoClassDefFoundError: ...
Spring通过其AOP(面向切面编程)特性,可以方便地集成各种第三方库,包括Quartz。 Quartz是开源的作业调度库,它可以用来创建、调度和执行计划任务。Quartz支持多种调度策略,如简单触发器、cron触发器等,能够...
总的来说,Spring为定时任务提供了灵活且强大的解决方案,无论是使用自身的API还是集成第三方库如Quartz,都能满足各种复杂的需求。理解并熟练掌握这些知识,对于开发高效、稳定的后台服务至关重要。在实际项目中,...
在Java中,可以使用HttpURLConnection或者第三方库如Apache HttpClient或OkHttp来实现。这些库能帮助我们构建请求,处理响应,并且可以设置各种HTTP头,如User-Agent,以模拟不同的浏览器行为。 3. **数据解析**:...
同时,如果项目中使用了其他第三方库,如 Apache Commons,也需要包含相应的 JAR 文件以保证功能完整。 总之,Quartz 和 Apache Commons 是 Java 开发中非常实用的工具,它们共同帮助开发者构建高效、灵活的定时...
最后,内容中还提到可以通过访问Quartz官网下载Quartz的相关资源,包括帮助文件、Java文档API(JavaDoc)说明文档、示例代码以及使用的第三方库等。这些资源对于开发者学习和使用Quartz具有重要价值。 在内容部分的...
Quartz框架只需要少数的第三方库,并且这些三方库是必需的,你很可能已经在使用这些库了。 Quartz框架的配置文件quartz.properties文件是Quartz框架的核心配置文件,它包括了Quartz框架的所有配置信息。你可以通过...
Spring框架提供了一系列工具来支持定时任务的实现,其中包括Spring自带的`spring-task`模块和第三方的Quartz库。下面我们将详细探讨这两种方式以及如何通过注解和非注解的方式进行配置。 首先,`spring-task`是...
2. **添加第三方依赖**:Quartz还依赖于一些第三方库,具体取决于你打算使用的功能。例如,如果你需要用到`Commons Digester`等库,则需要将它们添加到项目中。这些库通常位于`<QUARTZ_HOME>/lib/core`和`<QUARTZ_...
- **兼容性增强**:1.7.3可能增强了与不同Java版本和第三方库的兼容性,确保在各种环境下都能良好运行。 - **API调整**:可能有部分API进行了调整或优化,以提供更简洁、更强大的功能调用方式。 - **性能提升**:...