Quartz的XML调用模式


      ☆Quartz可以通过XML来配置定时服务,简单笔记如下:

      ☆ 定义一个处理业务逻辑的Class[继承Job] ,例如

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]

<?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)]


#============================================================================
# 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中写入下列代码][执行可以看结果]

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 " 在星期的字段,表示 " 这个月的第三个星期五 "
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值