☆Quartz可以通过XML来配置定时服务,简单笔记如下:
☆
定义一个处理业务逻辑的Class[继承Job],例如
DeleteFileJob
package mypackage;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class DeleteFileJob implements Job {
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("delete File!");
}
}
☆
配置Job[在conf目录下新建jobs.xml][每两秒执行一次DeleteFileJob]
conf/jobs.xml
<?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>deleteFileJob</name>
<group>dailyJob</group>
<description>deleteFileJob</description>
<job-class>mypackage.DeleteFileJob</job-class>
<volatility>false</volatility>
<durability>false</durability>
<recover>false</recover>
</job-detail>
<trigger>
<cron>
<name>dailyTrigger</name>
<group>dailyTrigger</group>
<description>dailyTrigger</description>
<job-name>deleteFileJob</job-name>
<job-group>dailyJob</job-group>
<cron-expression>0/2 * * * * ?</cron-expression>
</cron>
</trigger>
</job>
</quartz>
☆
配置Quartz[在conf目录下新建quartz.properties]
[简单说明:线程数量=一个(org.quartz.threadPool.threadCount=1),
线程优先级=普通(org.quartz.threadPool.threadPriority=5),
使用JobInitializationPlugin插件(org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin),
Job的配置文件(org.quartz.plugin.jobInitializer.fileNames= conf/jobs.xml)]
conf/quartz.properties
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = MyScheduler
org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 1
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold = 60000
#============================================================================
# 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 = conf/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
☆
启动Quartz[新建一个Class,在Main中写入下列代码][执行可以看结果]
main函数
public static void main(String[] args) throws Exception {
System.out.println("start");
System.getProperties().put("org.quartz.properties","conf/quartz.properties");
StdSchedulerFactory.getDefaultScheduler().start();
System.out.println("end");
}
☆
配置中cron-expression说明[网摘]
同样的,像SimpleTrigger一样,CroTrigger有一个startTime(启始时间)来记载下线程开始启动的时间,和endTime(结束时间)<非必须设定>来记载线程不继续执行的时间点。
Cron-Expressions是用来设定CronTrigger的实例,而Cron-Expressions一串字符串的表达式,而实际上是由七个sub-expressions(子式)所组成,来描述线程的个别细节部分。而这些sub-expression(子式)是用空白来区隔,并呈现顺序和意思如下:
"秒(Seconds) 分(Minutes) 小时(Hours) 天(Day-of-Month) 月份(Month) 星期(Day-of-Week) 年(Year)<非必须描述>"
举例来说,一个完整的cron-expression字符串"0 0 12 ? * WED"的意思是"每个星期三的中午十二点"。
个别的sub-expression可以包含了范围和/或列举的方式描述,如上行举例的星期这个字段("WED"),我们可以置换为"FRI"、"MON,WED,FRI"、甚至于"MON-WED,SAT"来表示。
星号(就是*这个)就是在那个字段是任意值的意思,以先前的为例,在月份这栏用星号表示每一个月份的意思阿,而如果把星号放到星期这栏,就表示这星期的每一天。
每一个字段都有一组数值来明确的说明,而这些数值就要正确的使用,如秒和分的字段就是数字0到59、时的字段就是数字0到23,日期可以0到31之间的任何数字,但必须注意的是你所选的月份有几天阿。月份的可以指定0到11的数值,也可以用字符串JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV 和 DEC来表示。
星期字段可以填入的值有1到7(1表示星期日),或者使用字符串SUN, MON, TUE, WED, THU, FRI 和 SAT。
左斜线(就是/这个)表示一个数值的增加,如你用"0/15"来表示分的字段,这意思是"开始于整点零分,每隔15分钟";如果在分字段用"3/20"表示"开始于第三分钟,每隔20分钟",而这意思等同"3,23,43"的表示意思。
问号(就是?这个)是允许使用在天和星期上的字段,而这表示"没有特定值",这特别有用在于要设定其中一个字段,但与另一个字段无关时。下面会举例,或者看CronTrigger JavaDOC有明确的说明。
L字母允许使用在天和日期上的字段,这个字母L是"last"的缩写,但在放在这两个字段有个别不同的意思,如L字母放在天的字段,表示这个月的最后一天,一月的最后一天是31号,二月的最后一天是28号(非润年)。如果把L字母放到星期字段的话只是单纯的表示"7"或"SAT"星期六而已。但是如果把L字母接在星期字段原来值的后面,这就表示"这个月的最后星期几",举例"6L"或"FRIL"都是表示这个月的最后一个星期五。所以呢,当使用L这个字母时,很重要的一点,就是不可以跟列举或范围的值放在一起,不然你会搞不清楚结果。
W子母表示所选取最接近非假日的平常日(星期一到星期五)的日子,如"15W"的表示放在天字段的话,这表示"这月份的第15天最接近平常日的日子"。
井号(就是#这个)表示这个月第几个星期几的平常日,如"6#3"或者"FRI#3"在星期的字段,表示"这个月的第三个星期五"。
posted on 2007-11-29 17:39
破茧而出 阅读(3794)
评论(2) 编辑 收藏 所属分类:
Java