使用
Quartz
实现定时功能,
Quartz
是一个完全由
java
编写的开源作业调度框架。
Quartz的几个核心的接口和类为:
Job
接口:
自己写的
“
定时程序
”
实现此接口的
void execute(JobExecutionContext arg0)
方法
,Job
还有一类为有状态的
StatefulJob
接口,如果我们需要在上一个作业执行完后,根据其执行结果再进行下次作业的执行,则需要实现此接口。
Trigger
抽象类:
调度类
(Scheduler)
在时间到时调用此类,再由
trigger
类调用指定的定时程序。
Quertz 中提供了两类触发器为:
SimpleTrigger,CronTrigger
。前者用于实现比较简单的定时功能,例如几点开始,几点结束,隔多长时间执 行,共执行多少次等,后者提供了使用表达式来描述定时功能,因此适用于比较复杂的定时描述,例如每个月的最后一个周五,每周的周四等。
JobDetail
类:
具体某个定时程序的详细描述,包括
Name,Group,JobDataMap
等。
J
obExecutionContext
类:
定时程序执行的
run-time
的上下文环境,用于得到当前执行的
Job
的名字,配置的参数等。
JobDataMap
类:
用于描述一个作业的参数,参数可以为任何基本类型例如
String,float
等,也可为某个对象的引用
.
JobListener,TriggerListener
接口:
用于监听触发器状态和作业扫行状态,在特写状态执行相应操作。
JobStore
类:
在哪里执行定进程序,可选的有在内存中,在数据库中。
#创建一个
Job
:
当 Quartz
调度器确定到时间要激发一个
Job
的时候,它就会生成一个
Job
实例,并调用这个实例的
execute()
方法。可以在
execute()
方法中执行你的业务逻辑。
public class TestJob implements Job{
public TestJob(){}
/**
* Test Job == Print Job Name + Execute Time
* @param context
* @throws JobExecutionException
*/
public void execute(JobExecutionContext context)throws JobExecutionException{
String name = context.getJobDetail().getJobDataMap().getString("name");
System.out.println("job executing..."+ name + "********Date : " + new Date());
}
}
#
创建并运行 Quartz Scheduler
当调度器起来之后,你可以利用它做很多事情或者获取到它的许多信息。例如,你也许需要安排一些
Job
或者改变又安排在调度器上
Job
的执行次数。你也许需要让调度器处于暂停模式,接着再次启动它以便重新执行在其上安排的作业。当调度器处于暂停模式时,不执行任何作业,即使是作业到了它所期待的执行时间。
public class QuartzTest {
/**
* Test Job : main method
*/
public static void main(String[] args) {
QuartzTest test = new QuartzTest();
try{
test.startSchedule();
}catch(Exception e){
e.printStackTrace();
}
}
public void startSchedule()throws Exception{
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail jobDetail = new JobDetail("testJob", Scheduler.DEFAULT_GROUP, TestJob.class);
jobDetail.getJobDataMap().put("name","testJob");
//结束时间
long end = System.currentTimeMillis() + 9000L;
//执行10次,每3秒执行一次,到9秒后结束
SimpleTrigger trigger = new SimpleTrigger("test",null,new Date(),new Date(end),10,3000L);
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
}
执行上面这个类基本实现了一个简单的定时程序。但问题是现在这个类只能应用在application
中,在
web
环境里执行还需要添加一些配置。
**************************************
web
应用中使用 ***********************************
在web.xml
中添加
QuartzInitializerServlet
,
Quartz
为能够在
web
应用中使用,提供了一个
QuartzInitializerServlet
和一个
QuartzInitializerListener
,用于在加载
web
应用时,对
quartz
进行初始化。
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>config-file</param-name>
<param-value>quartz.properties</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
上面提到了quartz.properties,
这是自行指定的,
Quartz
提供了一个默认的配置文件,可以满足基本的
j2se
应用,如果 在
web
应用中,我们想把
job,trigger
配置都写到文件中,就需要自己来写,并指定在初始化时加载我们自己的
quratz.properties
,位置放在
classes
下。
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure Plugins
#============================================================================
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = /scheduler/quartz_jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
quartz要使用插件来加载自己的
xml
配置文件,上边我们指定了在初始化时加载
classes\scheduler\quartz_jobs.xml
,默认的是加载
classes\quartz_jobs.xml
文件。
<?xml version="1.0" encoding="UTF-8"?>
<quartz>
<job>
<job-detail>
<name>test</name>
<group>DEFAULT</group>
<description>testJobhere</description>
<job-class>vivi.test.quartz.TestJob</job-class>
<job-data-map allows-transient-data="true">
<entry>
<key>name</key>
<value>test</value>
</entry>
</job-data-map>
</job-detail>
<trigger>
<cron>
<name>testCron</name>
<group>DEFAULT</group>
<job-name>test</job-name>
<job-group>DEFALUT</job-group>
<cron-expression>0/3 * * * * ?</cron-expression>
</cron>
</trigger>
</job>
</quartz>
分享到:
相关推荐
该压缩包内包含两个quartz的jar包, 分别是quartz-1.6.0.jar和quartz-all-1.6.0.jar
赠送jar包:quartz-2.3.0.jar; 赠送原API文档:quartz-2.3.0-javadoc.jar; 赠送源代码:quartz-2.3.0-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.0.pom; 包含翻译后的API文档:quartz-2.3.0-javadoc-API...
赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.2.pom; 包含翻译后的API文档:quartz-2.3.2-javadoc-API...
quartz quartz-1.8.6 dbTables quartz动态任务调度需要的数据库脚本。
quartz-2.4.0-SNAPSHOT-distribution.tar.gz包,解压后可查看里面的simple
quartz-all-1.6.3.jar
quartz-2.2.1 最新包
quartz-all-1.8.5.jar quartz-all-1.8.5.jar quartz-all-1.8.5.jar quartz-all-1.8.5.jar
quartz-2.2.3版本的quartz初始化sql语句
quartz-all-2.1.5
quartz:是一个任务调度框架,通过触发器设置作业的定时运行规则,来执行定时任务。相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细。把一系列任务自动安置到一...
赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.2.pom; 包含翻译后的API文档:quartz-2.3.2-javadoc-API...
quartz-1.8.4.jar
quartz-jobs-2.2.1-sources.jar 好东西,不解释
quartz-jobs-2.3.0.jar
quartz-2.1.1 的所有jar包 quartz-2.1.1.jar quartz-all-2.1.1.jar quartz-backward-compat-2.1.1.jar quartz-commonj-2.1.1.jar quartz-examples-2.1.1.jar quartz-jboss-2.1.1.jar quartz-oracle-2.1.1.jar quartz...
quartz-all-1.8.4.jar
quartz-jboss-1.8.6.jar quartz集群
赠送jar包:quartz-2.3.0.jar; 赠送原API文档:quartz-2.3.0-javadoc.jar; 赠送源代码:quartz-2.3.0-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.0.pom; 包含翻译后的API文档:quartz-2.3.0-javadoc-API...
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。