`

JAVA第三方开源库之Quartz

阅读更多
简介:
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();
			}
		}

	}
}


0
0
分享到:
评论

相关推荐

    java定时执行多任务和quartz定时执行多任务

    在这种情况下,第三方库Quartz就显得尤为出色。 1. **Java内置定时工具** - `java.util.Timer`: 这是一个简单的定时器,可以安排单次或周期性的任务。它通过`TimerTask`类来定义要执行的任务。但是,`Timer`类不是...

    quartz所需jar包 1.6.0、1.8.5、2.2.1三个版本

    Quartz是一款广泛应用于Java环境中的开源任务调度框架,它允许开发者定义、安排和执行复杂的定时任务。这个压缩包包含了Quartz的三个不同版本:1.6.0、1.8.5以及2.2.1。每个版本的jar包都有其特定的功能和改进,下面...

    Java关于时间调度的几种实现方(Timer Quartz Spring)

    本篇文章将深入探讨Java中的三种主要时间调度实现:`Timer`、`TimerTask`、以及第三方库`Quartz`和`Spring`的定时任务功能。 ### 1. Java `Timer` 和 `TimerTask` `java.util.Timer` 类提供了一个调度任务的方法,...

    Java框架介绍Quartz从入门到进阶.pdf

    3. 添加第三方库:Quartz框架需要少数的第三方库,例如Jakarta Commons库等,可以将这些库添加到工程中。 Quartz框架的使用步骤: 1. 创建Job接口实现类:创建一个实现org.quartz.Job接口的Java类,并添加一些逻辑...

    spring定时器 Spring定时器的两种实现方式Java的Timer类和OpenSymphony的Quartz。

    Spring框架提供了两种方式来处理定时任务:Java内置的`Timer`类和第三方库OpenSymphony的Quartz。下面将详细介绍这两种实现方式。 ### 1. Java `Timer` 类 Java `java.util.Timer` 类是Java标准库中的一个轻量级...

    JAVA定时调度框架-Quartz使用入门到精通.doc

    同时,还需要将 `/lib/core` 和 `/lib/optional` 目录下的第三方库引入,这些通常是 Jakarta Commons 库。Quartz 的配置主要通过 `quartz.properties` 文件完成,其中可以设置数据库连接、线程池大小等参数。 ...

    Quartz框架快速入门

    为了使用Quartz框架,首先需要创建一个Java工程,并在项目中添加Quartz的核心库以及其他必要的第三方库。这些库通常位于`<QUARTZ_HOME>/lib/core`和`<QUARTZ_HOME>/lib/optional`目录下,例如`quartz-<version>.jar`...

    Quartz 文档 所用到的Jar包 简单示例

    3. **Quartz Jar包**:压缩包内的lib目录包含了Quartz运行所需的五个jar包,这些包包含了Quartz的核心库、依赖的第三方库,如SLF4J用于日志记录,可能还有其他的库如Apache Commons Lang或Commons Logging等。...

    Quartz框架快速入门.pdf

    除此之外,根据你的需求,可能还需要其他第三方库,例如Commons Digester,它位于<QUARTZ_HOME>/lib/core和<QUARTZ_HOME>/lib/optional目录下。如果遇到与事务管理相关的错误,如`java.lang.NoClassDefFoundError: ...

    java动态管理定时任务

    Spring通过其AOP(面向切面编程)特性,可以方便地集成各种第三方库,包括Quartz。 Quartz是开源的作业调度库,它可以用来创建、调度和执行计划任务。Quartz支持多种调度策略,如简单触发器、cron触发器等,能够...

    Spring的定时任务开发及对Quartz和Timer支持

    总的来说,Spring为定时任务提供了灵活且强大的解决方案,无论是使用自身的API还是集成第三方库如Quartz,都能满足各种复杂的需求。理解并熟练掌握这些知识,对于开发高效、稳定的后台服务至关重要。在实际项目中,...

    java 爬取开源中国咨询、博客,CSDN咨询,博客

    在Java中,可以使用HttpURLConnection或者第三方库如Apache HttpClient或OkHttp来实现。这些库能帮助我们构建请求,处理响应,并且可以设置各种HTTP头,如User-Agent,以模拟不同的浏览器行为。 3. **数据解析**:...

    quartz所有jar

    同时,如果项目中使用了其他第三方库,如 Apache Commons,也需要包含相应的 JAR 文件以保证功能完整。 总之,Quartz 和 Apache Commons 是 Java 开发中非常实用的工具,它们共同帮助开发者构建高效、灵活的定时...

    Quartz(任务调度)使用培训

    最后,内容中还提到可以通过访问Quartz官网下载Quartz的相关资源,包括帮助文件、Java文档API(JavaDoc)说明文档、示例代码以及使用的第三方库等。这些资源对于开发者学习和使用Quartz具有重要价值。 在内容部分的...

    Quartz如何从入门到精通.pdf

    Quartz框架只需要少数的第三方库,并且这些三方库是必需的,你很可能已经在使用这些库了。 Quartz框架的配置文件quartz.properties文件是Quartz框架的核心配置文件,它包括了Quartz框架的所有配置信息。你可以通过...

    spring之定时任务实现(spring-task和quartz等不同方式)

    Spring框架提供了一系列工具来支持定时任务的实现,其中包括Spring自带的`spring-task`模块和第三方的Quartz库。下面我们将详细探讨这两种方式以及如何通过注解和非注解的方式进行配置。 首先,`spring-task`是...

    Quartz 框架快速入门

    2. **添加第三方依赖**:Quartz还依赖于一些第三方库,具体取决于你打算使用的功能。例如,如果你需要用到`Commons Digester`等库,则需要将它们添加到项目中。这些库通常位于`<QUARTZ_HOME>/lib/core`和`<QUARTZ_...

    quartz-1.7.3

    - **兼容性增强**:1.7.3可能增强了与不同Java版本和第三方库的兼容性,确保在各种环境下都能良好运行。 - **API调整**:可能有部分API进行了调整或优化,以提供更简洁、更强大的功能调用方式。 - **性能提升**:...

Global site tag (gtag.js) - Google Analytics