quartz使用實例

在web環境下,Quartz可以通過配置文件來完成後臺的作業調度,不必手工創建Trigger和Scheduler,其步驟如下:

首先將quartz.jar,以及lib目錄下面core和optional兩個目錄中的所有jar全都放入項目WEB-INF/lib目錄下

job就是一個簡單的java類,這裏的功能就是輸出當前的時間了。

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{
public Helloworld() {

}

private static Log _log = LogFactory
.getLog(Helloworld.class);

public void execute(JobExecutionContext context)
throws JobExecutionException {
_log.info("Hello World! - " + new Date());
}
}


然後編寫quartz.properties文件,這個文件的默認名稱就是quartz.properties,如果啓動項目的時候,Quartz沒有在工程中找到該文件,就會從自己的jar包下面讀取其默認的properties文件,其內容如下:

org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount =  2
org.quartz.threadPool.threadPriority = 4

org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin
org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true

上面的
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml

是用來配置定義job文件的名稱。

然後編寫quartz_job.xml,

<?xml version="1.0" encoding="UTF-8"?>
<quartz>
  <job>
    <job-detail>
      <name>helloworld</name>
      <group>group1</group>
      <job-class>Helloworld</job-class>
    </job-detail>
    <trigger>
      <cron>
        <name>test</name>
        <group>group1</group>
        <job-name>helloworld</job-name>
        <job-group>group1</job-group>
        <cron-expression>0 0/1 * * * ?</cron-expression>
     </cron>
    </trigger>
  </job>
</quartz>

可以看到,在配置文件中把jobdetail和trigger都作了完整的定義,並組合成一個job。下面,我們把上面兩個文件都放入/WEB-INF/classes目錄下,然後按照api中的說明修改一下web.xml。
     <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>

這樣,在啓動Tomcat的時候,QuartzInitializerServlet這個Servlet就會自動讀取quartz.properties這個配置文件,並初始化調度信息,啓動Scheduler。
我 在這裏用的是Quartz1.5.0,在1.5.1中新增加了QuartzInitializerListener,但是似乎有些問題,始終啓動不起來, 而且更過分的是,它的api居然寫錯了,在<listener-class>這個標記中,用了 QuartzInitializerServletListener,就算把機器砸了,它也找不到這個類啊!

現在就大功告成了
一個Job類,一個quartz.properties文件,一個quertz_job.xml文件,還有修改一下web.xml文件,很簡單呀!

 

 

 

quartz使用的具體信息參考   http://blog.csdn.net/ialin/archive/2008/12/26/3612133.aspx

發佈了62 篇原創文章 · 獲贊 8 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章