• Quartz 框架快速入门(三)


    转载 http://www.cnblogs.com/phinecos/archive/2008/09/03/1283103.html 

     在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建TriggerScheduler,其步骤如下:

    首先创建一个Web项目,将quartz-1.6.0.jar,以及lib目录下面core下所有jaroptional目录下的所有commons-beanutils.jarcommons-digester-1.7.jarbuild目录下的jta.jar都放入Web项目的WEB-INF"lib目录下。

    创建一个简单的jobHelloWorld,它的功能很简单,就是输出当前的时间,代码如下:

    复制代码
    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>
    复制代码

    可以看到,在配置文件中把jobdetailtrigger都作了完整的定义,并组合成一个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后,就可以看到输出的结果:

  • 相关阅读:
    KDiff
    如何用Javascript检测到所有的IE版本
    Chrome中的哪些端口是限制使用的?
    如何防止XSRF攻击
    External component has thrown an exception
    OpenGL中的原子操作需要注意的地方
    Unable to create new web application
    How to Redirect in ASPNET Web API
    图形转换的组合(注意从右向左读)
    如何用Client OM获取页面上一个Content web part的内容
  • 原文地址:https://www.cnblogs.com/chenying99/p/2798403.html
Copyright © 2020-2023  润新知