本文章是基于 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 = MyScheduler
org.quartz.threadPool.threadCount = 3
org.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.高级应用
以后完善