《pro Spring》学习笔记之Quartz的cronTrigger使用

原创 2007年09月11日 21:19:00

Quartz的出色之处就在于可以使用CronTrigger提供了复杂触发器表达式的支持

Cron表达式的各个部分(前六个是必选,最后一个是可选) 

序号      含义      允许的特殊字符

1        秒(0-59)     ,   -   *   /
2        分(0-59)     ,   -   *   /
3        时(0-23)     ,   -   *   /
4        日(1-31)     ,   -   *   /  ?  L  C
5        月                 (JAN-DEC或1-12   ,  -   *   /
6        星期             (SUN-STA或1-7)    ,  -   /   ?   L   C   #
7        年                 可选,1970-2099 如果为空,则表示全部时间范围   ,   -   *   /

其中星期和日不能同时设置,必须保证一个是?(?含义参考下文)

Cron表达式的通配符和特殊字符

*   表示任意值,这个特殊字符可以被使用在表达式的任域表示该值不需要被检查,因此我们的cron表达式可以在
     1970-2099之间的一个月的任意一天,任意月份,或者一周的任意一天触发 

?   无特定值,这个特殊的字符通常和其他指定的数值一起使用,表示一个值必须被显示但是不必检查

-   范围,例如在小时部分10-12表示10,11,12

,   列分隔符,允许制定一系列的数值,例如再星期域中指定MON,TUE,WE

/   增量,这个字符表示一个数值的增量,例如在分钟域中0/1表示从0分开始,每次增加一分钟
    如果我们定义5/8  表示从指定小时(或每个小时)的第5分钟开始,每次增加8分钟,但如果开始的时间已经超过
    了5分钟,比如说现在已经是6分了,那调度会立刻开始,如果现在是2分,则会等到5分的时候开始

L  L是英文中的单词LAST的缩写,他在日期和星期中的意思有一些不同。
     当在日期域中使用,它代表这个月的最后一天(3月31或者2月29等等)
     当使用在星期中,他永远表示的是一个数值 7-saturday(星期六),星期域中只有L表示每个周六
     当希望使用星期中的某一天时,L是最管用的,比如定义每个月的最后一个周五,可以这样表示星期域6L

#  这个值只能在星期域中使用,它代表这个月的第几个星期,例如2#3 表示,本月第3个星期1(pro spring此处错误,参看http://blog.csdn.net/daryl715/archive/2007/09/11/1781143.aspx

C  这个日期数值允许使用在日期和星期域中。这个日期是根据一个给定的日历计算出来的,在日期雨中给定一个
    20C将20号(当前日历包含20号时)或者20号后日历中包含的第一天(当给定日历不包括20号时)激活触发器
    ,在一个星期域中使用6C表示日历中周五(日历包括周五)或者第一天(不包括周五)

 

下面,我们看一个实际案例

Job

package ch14.SimpleQuartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class QuartzJob implements Job ...{

    
public void execute(JobExecutionContext context) throws JobExecutionException ...{
        System.out.println(context.getFireTime());
        System.out.println(
"this is a message");
        
    }

 
}

 

Test

 

package ch14.SimpleQuartz;

import java.util.Date;

import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

public class TestQuartz ...{

    
public static void main(String[] args) throws Exception ...{
        
        Scheduler scheduler
=new StdSchedulerFactory().getScheduler();
        scheduler.start();
        JobDetail jobDetail
=new JobDetail("messageJob",Scheduler.DEFAULT_GROUP,QuartzJob.class);
        
        String cronExpression
="2/5 * 19 ? 9 3";
        
        Trigger trigger
=new CronTrigger("cronTrigger",Scheduler.DEFAULT_GROUP,cronExpression);
        
        System.out.println(
new Date());
        scheduler.scheduleJob(jobDetail,trigger);
        
        System.in.read();
    }


}

 

package ch14.SimpleQuartz;

import java.util.Date;

import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

public class TestQuartz ...{

    
public static void main(String[] args) throws Exception ...{
        
        Scheduler scheduler
=new StdSchedulerFactory().getScheduler();
        scheduler.start();
        JobDetail jobDetail
=new JobDetail("messageJob",Scheduler.DEFAULT_GROUP,QuartzJob.class);
        
        String cronExpression
="2/5 * 19 ? 9 3";
        
        Trigger trigger
=new CronTrigger("cronTrigger",Scheduler.DEFAULT_GROUP,cronExpression);
        
        System.out.println(
new Date());
        scheduler.scheduleJob(jobDetail,trigger);
        
        System.in.read();
    }


}

 

其中2/5 * 19 ? 9 3  表示,从第2秒起每5秒执行一次,每天19时,9月份,日期不做检查,星期2

 

结果如下:

Tue Sep 11 19:52:02 CST 2007
this is a message

Tue Sep 11 19:52:07 CST 2007
this is a message

Tue Sep 11 19:52:12 CST 2007
this is a message

 

如果其中有一天是节假日,我们再节假日不用进行调度,则进行如下代码操作

 

Claendar cal=Calendar.getInstance();
cal.set(
2005,Calendar.DECEMBER,25);   2005年11月25日
HolidayCalendar calendar
=new HolidayCalendar ();
calendar.addExcludedDate(cal.getTime());
scheduler.addClaendar(
"xmasCalendar",calendar,true,false);

trigger.setClaendarName(
"xmasCalendar");

Quartz的简单使用,基于1.X(一)【入门及CronTrigger】

什么是Quartz Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现...
  • xxssyyyyssxx
  • xxssyyyyssxx
  • 2016年05月27日 14:13
  • 3275

Quartz学习笔记-Spring整合与简单使用

Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与...
  • wulinshishen
  • wulinshishen
  • 2015年02月16日 10:59
  • 1084

Quartz的Misfire处理规则

http://my.oschina.net/chenleijava/blog/109904 调度(scheduleJob)或恢复调度(resumeTrigger,resumeJo...
  • mituan1234567
  • mituan1234567
  • 2016年05月27日 16:55
  • 665

Quartz入门实例3-使用CronTrigger指定触发器执行job

 SimpleTrigger 对于需要在指定的毫秒处及时执行的作业还是不错的,但是假如你的作业需要更复杂的执行计划时,你也就要 CronTrigger 给你提供更强更灵活的功能。 cron ...
  • a67474506
  • a67474506
  • 2014年07月31日 14:03
  • 4035

任务调度框架Quartz(四)Quartz任务调度框架之触发器精讲SimpleTrigger和CronTrigger、最详细的Cron表达式范例

Quartz的主要接口类是Schedule、Job、Trigger,而触发器Trigger就是定时任务的触发时间,它规定安排了关联的任务会在什么时候执行,并且表明了再次执行的时机。Quartz提供了多...
  • zixiao217
  • zixiao217
  • 2016年11月08日 00:07
  • 3935

Quartz学习笔记1:Quartz概述

Quartz是开源任务调度框架中的翘楚,它提供了强大的 任务调度机制。Quartz允许开发人员灵活的定义触发器的调度时间表,并可对触发器和任务进行关联映射。此外,Quartz提供了调度运行环境的持久化...
  • yulei_qq
  • yulei_qq
  • 2016年09月04日 11:42
  • 738

Spring整理系列(09)——spring与quartz整合触发器执行表达式cronExpression详解

CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表。 CronTrigger,你可以指...
  • javaloveiphone
  • javaloveiphone
  • 2016年08月09日 18:02
  • 940

Quartz定时调度CronTrigger时间配置格式说明与实例

CronTrigger时间格式配置说明CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年]...
  • wangxy799
  • wangxy799
  • 2016年07月25日 14:44
  • 2335

quartz 调度任务应用

1:引入spring调度工厂类       2:编写调度管理类 @Service("quartzManagerJob") @Scope(ConfigurableBeanFactory.SCOPE...
  • tony168hongweigan
  • tony168hongweigan
  • 2014年04月02日 11:11
  • 1068

Quartz学习——Quartz简单入门Demo(二)

要学习Quartz框架,首先大概了解了Quartz的基本知识后,在通过简单的例子入门,一步一个脚印的走下去。 下面介绍Quartz入门的示例,由于Quartz的存储方式分为RAM和JDBC,分别对这...
  • u010648555
  • u010648555
  • 2017年02月04日 15:55
  • 5387
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《pro Spring》学习笔记之Quartz的cronTrigger使用
举报原因:
原因补充:

(最多只允许输入30个字)