Quartz 框架快速入门(三)

引用: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 框架快速入门(二)》中所讲述的内容编写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后,就可以看到输出的结果: