在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