posts - 28, comments - 27, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          web環境下開發quartz簡易攻略

          Posted on 2006-09-18 15:05 小小涼粉 閱讀(1147) 評論(0)  編輯  收藏 所屬分類: JavaEE

          在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文件,很簡單呀!

          不過看起來簡單,解決的過程卻很郁悶,單單是考慮如何在后臺進程中運行Servlet就花了好長時間,后來查資料以后才知道可以用Listener或者是啟動時運行的Servlet來完成,看來自己的底子還是不扎實的.

          另外就是在Tomcat出現問題的時候,居然忘了到logs下面去看日志,這個疏忽是不可原諒的!以后要牢牢記住!

          主站蜘蛛池模板: 隆化县| 徐闻县| 泸西县| 炎陵县| 南丰县| 阿克陶县| 安多县| 翁源县| 大埔区| 友谊县| 越西县| 当雄县| 苏尼特左旗| 安康市| 河津市| 云梦县| 新龙县| 剑川县| 武功县| 翁源县| 柳江县| 湛江市| 凤庆县| 安吉县| 长治县| 安康市| 竹山县| 嵊州市| 兰州市| 临沧市| 公主岭市| 常州市| 三原县| 绿春县| 科尔| 民县| 措美县| 二手房| 石台县| 新野县| 揭西县|