原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://shuyangyang.blog.51cto.com/1685768/890639
Quartz 是一个功能强大的作业调度工具。
日程安排好了之后,我们就要去执行,Quartz可以计划的执行这些任务,定时、循环或在某一个时间来执行我们需要做的事,用到Quartz可以很好的解决我们平时工作中的琐碎麻烦的事:比如,数据库系统需要我们每天23:50的时候需要执行一次备份,每月的15号需要将公司账目平台里的工资表导出……有了Quartz可以很好的来解决这些问题,不需要我们手动来执行。
Quartz官网:http://quartz-scheduler.org/ 可以在这里下载Quartz,也可以到我共享的资源里下载,免分的,请点击这里-》http://down.51cto.com/data/426993
我下载的是当前最新版本quartz-2.1.5。下载后,我们的压缩包里有:
docs文件夹:里面是Quartz的API、表数据库、图片文件夹
examples:里面是官方提供的一些DEMO
lib:第三方库,一些特性需要它们依靠
quartz:源码
quartz-*:支持各框架的源码
*.jar:一些JAR包
……
下面我们可以将官网下载的安装包里提供的例子导入到自己的IDE中,我使用的是MyEclipse8.5+Apache Tomcat6.0+JDK1.6.0。
创建一个Web应用程序,将第三方库lib文件夹下的jar包(quartz依赖的包)以及quartz-all-2.1.5.jar拷贝到WEB-INF/lib下,把examples/src文件夹拷贝到你的项目src下,刷新下项目,可能会出错,解决办法看这篇[MyEclipse中一些有趣的快捷键]这样即完成示例的准备工作。
来看官网提供的第一个例子:example1
注:将resources这个包里的log4j.xml、quartz_priority.properties这两个拷贝到src下,完整的如下:
先配置好日志文件,下面将会使用输出控制台打印出信息。
HelloJob.java
package org.quartz.examples.example1;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* 这仅仅是一个打印"hello world"的工作例子
* @author 束洋洋
* @createDate 2012-6-4下午10:13:34
*/
public class HelloJob implements Job {
private static Logger _log = LoggerFactory.getLogger(HelloJob.class);
/**
* <p>
* Empty constructor for job initilization
* </p>
* <p>
* Quartz requires a public empty constructor so that the
* scheduler can instantiate the class whenever it needs.
* </p>
*/
public HelloJob() {
}
/**
* <p>
* Called by the <code>{@link org.quartz.Scheduler}</code> when a
* <code>{@link org.quartz.Trigger}</code> fires that is associated with
* the <code>Job</code>.
* </p>
*
* @throws JobExecutionException
* if there is an exception while executing the job.
*/
public void execute(JobExecutionContext context)
throws JobExecutionException {
// Say Hello to the World and display the date/time
_log.info("Hello World! - " + new Date());
}
}
这是任务执行类,需要实现job接口,在execute方法里写具体的任务实现。org.quartz.JobExecutionContext这个对象可以获取到任务调度程序里传递过来的参数,后面讲到。
SimpleExample.java(任务调度程序类)
Quartz框架执行任务调度步骤:
创建Scheduler对象,可以从SchedulerFactory类里取得。
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
创建JobDetail对象,执行任务调度的方法,这个方法实现了job接口
JobDetail job = newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build();
构造job的触发器对象,可以指定任务时间或周期。
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startAt(runTime)
.build();
告诉Quartz安排工作使用的触发器(安排任务)
sched.scheduleJob(job, trigger);
开始调度任务程序
sched.start();
暂停调度任务,调用standby()使Scheduler回到"stand-by"模式。再次调用start()方法,使Scheduler回到运行状态。
sched.standby();
停止调度任务,停止后不能重新开始。
sched.shutdown(true);
/*
* Copyright 2005 - 2009 Terracotta, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
*/
package org.quartz.examples.example1;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import static org.quartz.DateBuilder.*;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This Example will demonstrate how to start and shutdown the Quartz
* scheduler and how to schedule a job to run in Quartz.
*
* @author Bill Kratzer
*/
public class SimpleExample {
public void run() throws Exception {
Logger log = LoggerFactory.getLogger(SimpleExample.class);
log.info("------- Initializing ----------------------");
// First we must get a reference to a scheduler
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
log.info("------- Initialization Complete -----------");
// computer a time that is on the next round minute
Date runTime = evenMinuteDate(new Date());
log.info("------- Scheduling Job -------------------");
// define the job and tie it to our HelloJob class
JobDetail job = newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build();
// Trigger the job to run on the next round minute
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startAt(runTime)
.build();
// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);
log.info(job.getKey() + " will run at: " + runTime);
// Start up the scheduler (nothing can actually run until the
// scheduler has been started)
sched.start();
log.info("------- Started Scheduler -----------------");
// wait long enough so that the scheduler as an opportunity to
// run the job!
log.info("------- Waiting 10 seconds... -------------");
try {
// wait 65 seconds to show job
Thread.sleep(10000);
// executing...
} catch (Exception e) {
}
log.info("------- 暂停下程序... -------------");
sched.standby();
Thread.sleep(10000);
log.info("------- 重新开始程序... -------------");
sched.start();
// shut down the scheduler
log.info("------- Shutting Down ---------------------");
sched.shutdown(true);
log.info("------- Shutdown Complete -----------------");
}
public static void main(String[] args) throws Exception {
SimpleExample example = new SimpleExample();
example.run();
}
}
控制台打印信息:
[INFO] 06 六月 09:29:06.906 下午 main [org.quartz.examples.example1.SimpleExample]
------- Initializing ----------------------
[INFO] 06 六月 09:29:07.062 下午 main [org.quartz.impl.StdSchedulerFactory]
Using default implementation for ThreadExecutor
[INFO] 06 六月 09:29:07.078 下午 main [org.quartz.simpl.SimpleThreadPool]
Job execution threads will use class loader of thread: main
[INFO] 06 六月 09:29:07.125 下午 main [org.quartz.core.SchedulerSignalerImpl]
Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[INFO] 06 六月 09:29:07.125 下午 main [org.quartz.core.QuartzScheduler]
Quartz Scheduler v.2.1.5 created.
[INFO] 06 六月 09:29:07.125 下午 main [org.quartz.simpl.RAMJobStore]
RAMJobStore initialized.
[INFO] 06 六月 09:29:07.125 下午 main [org.quartz.core.QuartzScheduler]
Scheduler meta-data: Quartz Scheduler (v2.1.5) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
[INFO] 06 六月 09:29:07.125 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
[INFO] 06 六月 09:29:07.125 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler version: 2.1.5
[INFO] 06 六月 09:29:07.125 下午 main [org.quartz.examples.example1.SimpleExample]
------- Initialization Complete -----------
[INFO] 06 六月 09:29:07.140 下午 main [org.quartz.examples.example1.SimpleExample]
------- Scheduling Job -------------------
[INFO] 06 六月 09:29:07.171 下午 main [org.quartz.examples.example1.SimpleExample]
group1.job1 will run at: Wed Jun 06 21:30:00 CST 2012
[INFO] 06 六月 09:29:07.171 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[INFO] 06 六月 09:29:07.171 下午 main [org.quartz.examples.example1.SimpleExample]
------- Started Scheduler -----------------
[INFO] 06 六月 09:29:07.171 下午 main [org.quartz.examples.example1.SimpleExample]
------- Waiting 10 seconds... -------------
[INFO] 06 六月 09:29:17.171 下午 main [org.quartz.examples.example1.SimpleExample]
------- 暂停下程序... -------------
[INFO] 06 六月 09:29:17.171 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused.
[INFO] 06 六月 09:29:27.171 下午 main [org.quartz.examples.example1.SimpleExample]
------- 重新开始程序... -------------
[INFO] 06 六月 09:29:27.171 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[INFO] 06 六月 09:29:27.171 下午 main [org.quartz.examples.example1.SimpleExample]
------- Shutting Down ---------------------
[INFO] 06 六月 09:29:27.171 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down.
[INFO] 06 六月 09:29:27.171 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused.
[INFO] 06 六月 09:29:27.578 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete.
[INFO] 06 六月 09:29:27.578 下午 main [org.quartz.examples.example1.SimpleExample]
------- Shutdown Complete -----------------
这里使用了Thread.sleep(10000); 是为了给调度的程序有时间执行。
=======================================================================
以上属于个人观点,难免有错误,如发现错误请留言告之,我会订正的。
=======================================================================
本文出自 “On My Way” 博客,请务必保留此出处http://shuyangyang.blog.51cto.com/1685768/890639
分享到:
相关推荐
在版本2.1.5中,Quartz引入了一些重要的改进和调整,使得它更加稳定和灵活,适用于大型和复杂的项目。在这个实例中,我们将深入探讨Quartz 2.1.5的关键特性和使用方法。 首先,基础调用实例展示了如何在Java代码中...
quartz-2.1.5.jar 任务调度
1. **任务调度**:Quartz允许程序定义Job(任务)和Trigger(触发器),Job是实际要执行的工作,而Trigger则定义了Job何时被执行。你可以设置一次性任务或周期性的任务,例如每小时运行一次。 2. **灵活的调度策略*...
英文版 quartz-2.1.5版本的API
quartz-all-2.1.5
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成...
这个压缩包包含的是Quartz 2.1.5版本的相关资源,其中"quartz-all-2.1.5.jar"是Quartz的核心库文件,包含了所有必要的类和接口,用于在项目中集成和使用Quartz。而"api.chm"文件则是Quartz的API帮助文档,尽管是英文...
1. **Spring Framework**: - Spring 是一个全面的Java应用程序开发框架,提供依赖注入(DI),面向切面编程(AOP),以及用于简化企业级应用开发的其他功能。 - 版本2.1.5属于较早的Spring版本,其中包含了核心...
1. **quartz-all-2.1.5.jar**:这是Quartz库的核心JAR文件,包含了所有必要的类和接口,用于实现和调度任务。 2. **log4j-1.2.8.jar**:这是一个日志处理库,Quartz可能依赖它来记录运行时信息和错误。 3. **slf4j-...
为了使用Quartz,你需要引入相应的依赖,如`quartz-2.1.5.tar.gz`,这是一个早期版本的Quartz库。在实际开发中,可能需要更新到更稳定或功能更丰富的版本。`动态获取时间.zip`可能包含了一些示例代码或者数据库脚本...
1. **分布式调度**:Elastic-Job Lite Console 2.1.5 支持在分布式环境下对任务进行智能调度,能够自动处理节点失效、任务均衡等问题,确保任务的高可用性和一致性。 2. **弹性扩展**:根据集群资源动态调整任务执行...
spring 3.2.2 + quartz 2.1 需要的包 包括 quartz-2.1.5.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar spring-context-support-3.2.0.RELEASE.jar
ElasticJob-Lite的主要功能是实现任务的分布式调度,它基于阿里巴巴的Quartz Scheduler进行了扩展,以适应大规模分布式系统的需求。该框架提供了故障转移、任务补偿、并行度控制、资源隔离等高级特性,确保了任务的...
固定资产设备管理系统,适合中小企业需求,对常用资产设备进行信息化管理,自定义支持各类设备、自带导入导出、维护工作统计、采购管理、文档管理、运维监控Zabbix、知识库功能等。...- Angular 1.x
SpringBoot 2.1.5.RELEASE Maven 3.5.2 Tomcat 8 jdk1.8 #### 2、技术栈 技术栈:Spring+Springmvc+Mybatis+SpringBoot+Mysql+Redis+Thymeleaf+Kafka+ElasticSearch+Quartz+Caffine #### 3、项目启动方式 ...
Spring Boot 2.1.5 RELEASE Spring MVC ORM:MyBatis 数据库:MySQL 5.7 分布式缓存:Redis 本地缓存:Caffeine 消息队列:Kafka 2.13-2.7.0 搜索引擎:Elasticsearch 6.4.3 安全:Spring Security 邮件任务:Spring...
Quartz 2.3.2 UFLO 2.1.5(流程引擎) K-form-design 3.x(表单) Angular 1.x 所需环境 操作系统:Window、推荐Linux 数据库:Mysql 5.7.X 中间件:Tomcat 9 以上 Java版本:Java 1.8 以上 1.项目导入到idea开发工具中,...
Quartz 2.3.2 UFLO 2.1.5(流程引擎) K-form-design 3.x(表单) Angular 1.x 系统参数: 数据字典 缓存管理 权限分配 流程管理 表单管理 服务监控 数据备份 用户组织 角色管理组织架构 用户管理 资产管理:资产管理...
Quartz 2.3.2 UFLO 2.1.5(流程引擎) K-form-design 3.x(表单) Angular 1.x 系统参数: 数据字典 缓存管理 权限分配 流程管理 表单管理 服务监控 数据备份 用户组织 角色管理组织架构 用户管理 资产管理:资产管理备件...