Quartz是一個完全由java編寫的開源作業調度框架,具體的介紹可到http://www.opensymphony.com/quartz/官方網站查看。
他的主要功能就是做調度,顧名思義就是定時自動去幫我們執行一些程序 比如:定時的數據同步,備份,檢查之類的工作等等
本文沒有結合別的框架,只是單獨把quartz拿出來做的例子,廢話不多說
首先是下載quartz相關jar包,放入web-inf的lib下
commons-beanutils.jar
commons-collections-3.1.jar
commons-digester.jar
commons-logging-1.1.1.jar
jta.jar
log4j-1.2.16.jar
quartz-all-1.6.0.jar
c3p0-0.9.1.1.jar
slf4j-api-1.6.6.jar
slf4j-log4j12-1.6.6.jar
然後我們創建一個第一個testjob,實現Job接口,重寫execute方法
package com.quartz.test;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class TestJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println("TestJob....Start:"+sdf.format(new Date()));
}
}
然後在web.xml中配置tomcat啓動時加載的servlet 對quartz進行初始化,QuartzInitializerServlet是jar包中的文件
<servlet>
<servlet-name>quartz</servlet-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<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>
<init-param>
<param-name>start-scheduler-on-load</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
quartz.properties是quartz的配置文件,放在src下即可,內容如下:
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
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 = quartz_jobx.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
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 = quartz_jobx.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
quartz_jobx.xml 配置文件放在src下即可,內容如下,配置指定要工作的類以及類路徑,其中<cron-expression>0/10 * * * * ?</cron-expression>指定工作的週期,0/10 * * * * ? 指每隔10秒執行一次 參數分別指 秒 分 時 日 月 星期 年(年是可選參數)
<?xml version="1.0" encoding="UTF-8"?>
<quartz>
<job>
<job-detail>
<name>TestJob</name>
<group>Test</group>
<job-class>com.quartz.test.TestJob</job-class>
</job-detail>
<trigger>
<cron>
<name>TestJob</name>
<group>Test</group>
<job-name>TestJob</job-name>
<job-group>Test</job-group>
<cron-expression>0/10 * * * * ?</cron-expression>
</cron>
</trigger>
</job>
</quartz>