0
点赞
收藏
分享

微信扫一扫

quartz集成


在web环境下,Quartz可以通过配置文件来完成后台的作业调度,不必手工创建Trigger和Scheduler,其步骤如下:

首先将quartz.jar,以及lib目录下面core和optional两个目录中的所有jar全都放入项目WEB-INF\lib目录下

job就是一个简单的java类,这里的功能就是输出当前的时间了。

import java.util.Date; 


import org.apache.commons.logging.Log; 

import org.apache.commons.logging.LogFactory; 

import org.quartz.Job; 

import org.quartz.JobExecutionContext; 

import org.quartz.JobExecutionException; 


public class Helloworld implements Job{ 

public Helloworld() { 


} 


private static Log _log = LogFactory 

.getLog(Helloworld.class); 


public void execute(JobExecutionContext context) 

throws JobExecutionException { 

_log.info("Hello World! - " + new Date()); 

} 

}



然后编写quartz.properties文件,这个文件的默认名称就是quartz.properties,如果启动项目的时候,Quartz没有在工程中找到该文件,就会从自己的jar包下面读取其默认的properties文件,其内容如下:

org.quartz.scheduler.instanceName = TestScheduler 

org.quartz.scheduler.instanceId = one 


org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 

org.quartz.threadPool.threadCount = 2 

org.quartz.threadPool.threadPriority = 4 


org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin 

org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy} 

org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9} 


org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin 

org.quartz.plugin.jobInitializer.fileName = quartz_job.xml 

org.quartz.plugin.jobInitializer.overWriteExistingJobs = false 

org.quartz.plugin.jobInitializer.failOnFileNotFound = true 

org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin 

org.quartz.plugin.shutdownhook.cleanShutdown = true



上面的
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml

是用来配置定义job文件的名称。

然后编写quartz_job.xml,

<?xml version="1.0" encoding="UTF-8"?> 

<quartz> 

 <job> 

 <job-detail> 

 <name>helloworld</name> 

 <group>group1</group> 

 <job-class>Helloworld</job-class> 

 </job-detail> 

 <trigger> 

 <cron> 

 <name>test</name> 

 <group>group1</group> 

 <job-name>helloworld</job-name> 

 <job-group>group1</job-group> 

 <cron-expression>0 0/1 * * * ?</cron-expression> 

 </cron> 

 </trigger> 

 </job> 

</quartz>



可以看到,在配置文件中把jobdetail和trigger都作了完整的定义,并组合成一个job。下面,我们把上面两个文件都放入/WEB-INF/classes目录下,然后按照api中的说明修改一下web.xml。

<servlet> 

 <servlet-name> 

 QuartzInitializer 

 </servlet-name> 

 <display-name> 

 Quartz Initializer Servlet 

 </display-name> 

 <servlet-class> 

 org.quartz.ee.servlet.QuartzInitializerServlet 

 </servlet-class> 

 <load-on-startup>1</load-on-startup> 

 <init-param> 

 <param-name>config-file</param-name> 

 <param-value>/quartz.properties</param-value> 

 </init-param> 

 <init-param> 

 <param-name>shutdown-on-unload</param-name> 

 <param-value>true</param-value> 

 </init-param> 

 </servlet>



这样,在启动Tomcat的时候,QuartzInitializerServlet这个Servlet就会自动读取quartz.properties这个配置文件,并初始化调度信息,启动Scheduler。
我在这里用的是Quartz1.5.0,在1.5.1中新增加了QuartzInitializerListener,但是似乎有些问题,始终启动不起来,而且更过分的是,它的api居然写错了,在<listener-class>这个标记中,用了QuartzInitializerServletListener,就算把机器砸了,它也找不到这个类啊!


一个Job类,
一个quartz.properties文件,
一个quertz_job.xml文件,
修改一下web.xml文件,

举报

相关推荐

0 条评论