Quartz 架構快速入門(三)

來源:互聯網
上載者:User
     在前面兩篇文章中簡單介紹了在 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後,就可以看到輸出的結果:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.