Quartz 框架快速入门(三)
?在前面兩篇文章中簡(jiǎn)單介紹了在java應(yīng)用程序中如何使用Quartz框架,這一篇中我們將看到如何在web環(huán)境下通過(guò)配置文件來(lái)完成Quartz的后臺(tái)作業(yè)調(diào)度,而不必手工去創(chuàng)建Trigger和Scheduler,其步驟如下:
首先創(chuàng)建一個(gè)Web項(xiàng)目,將quartz-1.6.0.jar,以及lib目錄下面core下所有jar,optional目錄下的所有commons-beanutils.jar和commons-digester-1.7.jar,build目錄下的jta.jar都放入Web項(xiàng)目的WEB-INF"lib目錄下。
創(chuàng)建一個(gè)簡(jiǎn)單的job類HelloWorld,它的功能很簡(jiǎn)單,就是輸出當(dāng)前的時(shí)間,代碼如下:
然后按照上一篇文章《Quartz 框架快速入門(二)》中所講述的內(nèi)容編寫quartz.properties文件。如果啟動(dòng)項(xiàng)目的時(shí)候,Quartz沒(méi)有在工程中找到該文件,就會(huì)從自己的jar包下面讀取其默認(rèn)的properties文件,其內(nèi)容如下
#============================================================================#?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
然后編寫任務(wù)配置文件jobs.xml,內(nèi)容如下:
<?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都作了完整的定義,并組合成一個(gè)job。下面,我們把上面兩個(gè)文件都放入/WEB-INF/classes目錄下,然后按照api中的說(shuō)明修改一下web.xml,內(nèi)容如下
<?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>
這樣,在啟動(dòng)Tomcat的時(shí)候,QuartzInitializerServlet這個(gè)Servlet就會(huì)自動(dòng)讀取quartz.properties這個(gè)配置文件,并初始化調(diào)度信息,啟動(dòng)Scheduler。
啟動(dòng)tomcat后,就可以看到輸出的結(jié)果:
?
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());?
????}
}
總結(jié)
以上是生活随笔為你收集整理的Quartz 框架快速入门(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Quartz 框架快速入门(一)
- 下一篇: Quartz 框架快速入门(四)