<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    web環境下開發quartz簡易攻略

    Posted on 2006-09-18 15:05 小小涼粉 閱讀(1143) 評論(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下面去看日志,這個疏忽是不可原諒的!以后要牢牢記住!

    主站蜘蛛池模板: 久久国产亚洲高清观看| 亚洲精品无码高潮喷水在线| 亚洲人成免费网站| 8x成人永久免费视频| 亚洲资源在线视频| 97性无码区免费| 亚洲欧洲AV无码专区| 全免费A级毛片免费看网站| 狠狠色伊人亚洲综合网站色| 成人午夜大片免费7777| 亚洲熟女乱色一区二区三区| 日本一道高清不卡免费| 高清免费久久午夜精品| 亚洲色婷婷六月亚洲婷婷6月| 成人免费无码H在线观看不卡| 久久亚洲AV午夜福利精品一区| 久久久久国产免费| 亚洲一区二区久久| 四虎永久成人免费| 久久99毛片免费观看不卡| 91亚洲一区二区在线观看不卡| 国产国产人免费视频成69堂| 亚洲AV永久无码精品一福利| 亚洲人午夜射精精品日韩| 91精品成人免费国产| 亚洲成人在线免费观看| 日韩黄色免费观看| 国产日韩AV免费无码一区二区| 亚洲精品在线电影| gogo全球高清大胆亚洲| 全免费a级毛片免费看| 亚洲色偷偷色噜噜狠狠99| 久久精品国产精品亚洲| 69xx免费观看视频| 老司机午夜性生免费福利| 亚洲av中文无码乱人伦在线咪咕 | avtt亚洲天堂| 久久免费公开视频| 亚洲av无码专区亚洲av不卡| 亚洲成AV人片在线观看无码| 午夜dj免费在线观看|