Quartz的XML调用模式

本文介绍如何使用Quartz通过XML配置实现定时任务。包括定义业务逻辑类、配置定时任务执行频率及时间,以及启动调度器的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


      ☆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"在星期的字段,表示"这个月的第三个星期五"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值