QuartZ 快速入门

来源:互联网 发布:javascript报表工具 编辑:程序博客网 时间:2024/06/05 05:03

本文章是基于 QuartZ2.x的Document编写的.


1.下载QuartZ.jar

下载地址:http://www.quartz-scheduler.org/downloads/

或者去Maven 搜索进行下载.

2.安装QuartZ.jar

QuartZ有许多Jar包,主要的jar包为quartz-all-xxx.jar,导入到自己的依赖中.就可以使用基础功能了.

3.配置QuartZ

配置文件必须要放在classpath下.建议的名称为quartz.properties

如果你构建的是一个web应用程序,那么你得把配置文件放入在WEB-INF/classes文件夹中.

IDE默认都会导入.

3.1 配置

完整的配置文件在: http://www.quartz-scheduler.org/documentation/quartz-2.x/configuration/

这里只列出一些 我项目中用到得配置和官方文档中的配置.

官方文档:

org.quartz.scheduler.instanceName = MySchedulerorg.quartz.threadPool.threadCount = 3org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.scheduler.instanceName

解释:这个字段对于调度程序本身是没有任何意义,如果你使用集群功能,

则必须在'逻辑'相同的调度程序中对集群中的每个实例使用相同的名称

org.quartz.threadPool.threadCount

设置线程池中的线程数量.

org.quartz.jobStore.class

所有的quartz数据(工作和触发器的细节),都是存放在内存中的,即使你使用了数据库,

官方建议在数据库工作之前通过RAMJobStore获取Quartz working,

项目中的配置

#===============================================================
#调度器属性
#===============================================================
org.quartz.scheduler.instanceName=AAAAAA
#可以使任意字符,但对于调度器来说必须唯一,因为在集群中相当于逻辑调度器,
#使用AUTO,则quartz会自动帮你生成,或者使用SYS_PROP
#如何你希望该值来自于系统属性,请看这里org.quartz.scheduler.instanceId
org.quartz.scheduler.instanceId=AUTO


#===============================================================
#作业存储设置
#===============================================================
#使用聚类功能,如果你有多个quartz的实例使用相同的一组数据库表,这个属性必须为true
org.quartz.jobStore.isClustered=true
#集群检测间隔
org.quartz.jobStore.clusterCheckinInterval=15000
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreCMT
#数据库驱动委托类
#选择你使用的数据库的方言
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.DB2v8Delegate
#表名前缀
#quartz表在数据库穿件的前缀.
org.quartz.jobStore.tablePrefix=I2_TMM_
#不要设置自动提交为false
#意思就是自动提交
#控制的是setAutoCommit(false);
org.quartz.jobStore.dontSetAutoCommitFalse=true
#产生锁的处理程序.
#用于生成在作业存储数据上锁定控件的对象实例的类名
org.quartz.jobStore.lockHandler.class=org.quartz.impl.jdbcjobstore.StdRowLockSemaphore
#数据源
org.quartz.jobStore.dataSource=timerManager
#非托管的文本数据源
org.quartz.jobStore.nonManagedTXDataSource=timerManager_nonxa
#数据库数据源,你的应用程序服务器拖得的JNDI的URL
org.quartz.dataSource.timerCustomer.jndiURL=java:comp/env/jdbc/manager
org.quartz.dataSource.timerCustomer_nonxa.jndiURL=java:comp/env/jdbc/manager


#===============================================================
#线程池属性
#===============================================================
#你使用的线程池的名字,建议使用:org.quartz.simpl.SimpleThreadPool
#它基本上能满足所有的用户需求,提供一个固定大小的线程池,
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
#线程池线程的数量
org.quartz.threadPool.threadCount=5
#线程的优先级 默认是5, 可选值是1-10
org.quartz.threadPool.threadPriority=5

4.简单示例

import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.impl.StdSchedulerFactory;public class QuartzTest {    public static void main(String[] args) {        try {            // Grab the Scheduler instance from the Factory            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();            // and start it off            scheduler.start();            scheduler.shutdown();        } catch (SchedulerException se) {            se.printStackTrace();        }    }}
上面是一个启动和关闭的实现.

一旦你获取了一个调度器,你的应用程序将不会被终止,知道你的程序调用shutdown()方法.

因为它的线程还在工作.

你可以查控制台查看输出.

让我们在start()和shutdown中间加入一点代码

        // 定义一个job,并和newJob相关联        JobDetail job = newJob(HelloJob.class)            .withIdentity("job1", "group1")            .build();        // 触发作业现在运行, 然后每个40秒调用一次.        Trigger trigger = newTrigger()            .withIdentity("trigger1", "group1")            .startNow()            .withSchedule(simpleSchedule()                    .withIntervalInSeconds(40)                    .repeatForever())                        .build();        // Tell quartz to schedule the job using our trigger 告诉quartz去触发作业        sched.scheduleJob(job, trigger);



5.高级应用

以后完善


原创粉丝点击