转载 http://www.cnblogs.com/phinecos/archive/2008/09/03/1283103.html
在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建Trigger和Scheduler,其步骤如下:
首先创建一个Web项目,将quartz-1.6.0.jar,以及lib目录下面core下所有jar,optional目录下的所有commons-beanutils.jar和commons-digester-1.7.jar,build目录下的jta.jar都放入Web项目的WEB-INF"lib目录下。
创建一个简单的job类HelloWorld,它的功能很简单,就是输出当前的时间,代码如下:
package com.vista.quartz; 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 { private static Log logger = LogFactory.getLog(Helloworld. class ); // 日志记录器 public Helloworld() { } public void execute(JobExecutionContext context) throws JobExecutionException { logger.info( " Hello World! - " + new Date()); } } 然后按照上一篇文章《》中所讲述的内容编写quartz.properties文件。如果启动项目的时候,Quartz没有在工程中找到该文件,就会从自己的jar包下面读取其默认的properties文件,其内容如下
#============================================================================ # Configure Main Scheduler Properties #============================================================================ org.quartz.scheduler.instanceName = QuartzScheduler org.quartz.scheduler.instanceId = AUTO #============================================================================ # Configure ThreadPool #============================================================================ org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 5 org.quartz.threadPool.threadPriority = 5 #============================================================================ # Configure JobStore #============================================================================ org.quartz.jobStore.misfireThreshold = 60000 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore #============================================================================ # 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.fileNames = jobs.xml org.quartz.plugin.jobInitializer.overWriteExistingJobs = true org.quartz.plugin.jobInitializer.failOnFileNotFound = true org.quartz.plugin.jobInitializer.scanInterval = 10 org.quartz.plugin.jobInitializer.wrapInUserTransaction = false 然后编写任务配置文件jobs.xml,内容如下:
<? xml version='1.0' encoding='utf-8' ?> < quartz xmlns ="http://www.opensymphony.com/quartz/JobSchedulingData" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://www.opensymphony.com/quartz/JobSchedulingData http://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd" version ="1.5" > < job > < job-detail > < name > HelloWorld </ name > < group > DEFAULT </ group > < description > A job that just for test </ description > < job-class > com.vista.quartz.Helloworld </ job-class > < volatility > false </ volatility > < durability > false </ durability > < recover > false </ recover > </ job-detail > < trigger > < simple > < name > HelloTrigger1 </ name > < group > DEFAULT </ group > < job-name > HelloWorld </ job-name > < job-group > DEFAULT </ job-group > < start-time > 2008-09-03T15:56:30 </ start-time > <!-- repeat indefinitely every 10 seconds --> < repeat-count > -1 </ repeat-count > < repeat-interval > 10000 </ repeat-interval > </ simple > </ trigger > </ job > </ quartz > 可以看到,在配置文件中把jobdetail和trigger都作了完整的定义,并组合成一个job。下面,我们把上面两个文件都放入/WEB-INF/classes目录下,然后按照api中的说明修改一下web.xml,内容如下
<? xml version="1.0" encoding="UTF-8" ?> < web-app version ="2.4" xmlns ="http://java.sun.com/xml/ns/j2ee" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > < 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 > < welcome-file-list > < welcome-file > index.jsp </ welcome-file > </ welcome-file-list > </ web-app > 这样,在启动Tomcat的时候,QuartzInitializerServlet这个Servlet就会自动读取quartz.properties这个配置文件,并初始化调度信息,启动Scheduler。
启动tomcat后,就可以看到输出的结果: