在前面两篇文章中简单介绍了在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,它的功能很简单,就是输出当前的时间,代码如下:



Quartz 框架快速入门(三)_配置文件

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 框架快速入门(三)_配置文件


然后按照上一篇文章《​Quartz 框架快速入门(二)​》中所讲述的内容编写quartz.properties文件。如果启动项目的时候,Quartz没有在工程中找到该文件,就会从自己的jar包下面读取其默认的properties文件,其内容如下



Quartz 框架快速入门(三)_配置文件

#============================================================================

# 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

Quartz 框架快速入门(三)_配置文件


然后编写任务配置文件jobs.xml,内容如下:



Quartz 框架快速入门(三)_配置文件

<?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>

Quartz 框架快速入门(三)_配置文件


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



Quartz 框架快速入门(三)_配置文件

<?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>

Quartz 框架快速入门(三)_配置文件


这样,在启动Tomcat的时候,QuartzInitializerServlet这个Servlet就会自动读取quartz.properties这个配置文件,并初始化调度信息,启动Scheduler。

启动tomcat后,就可以看到输出的结果:

Quartz 框架快速入门(三)_java_09