《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学习笔记-Spring整合与简单使用

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

【学习笔记】Spring-Quartz-SimpleTriggerBean时间格式

CronTrigger配置格式:格式: [秒] [分] [小时] [日] [月] [周] [年]序号 说明  是否必填 允许填写的值 允许的通配符  1 秒 是 0-59  , - * /  2 ...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Quartz2.x学习笔记(四):spring注入异常解决方法

在使用Quartz与spring整合时,有时需要在Job任务类里注入spring的bean。如下: 那么问题来了,当你启动项目时,会发现报了空指针异常: 查阅资料以及百度之...

【学习笔记】Spring-3.2.4 + Quartz-2.2.0集成实例

Spring3.0不支持Quartz2.0,因为org.quartz.CronTrigger在2.0从class变成了一个interface造成IncompatibleClassChangeError...

Spring.NET学习笔记25——整合Quartz.NET(应用篇) Level 200

Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于WinForm和ASP.NET应用中。它提供了巨大的灵活性而不牺牲...

Spring 整合 Quartz 任务调度框架学习笔记

定时任务怎么做。 我们首先先新建一个任务 RefreshAccessTokenTask 通过 Job 来执行上面的 Task。参考资料: http://www.mkyong.com/spring...

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

原文链接: http://blog.csdn.net/foamflower/article/details/4260645 1、   CronTrigger时间格式配置说明 CronT...

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

1、   CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填...

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

1、   CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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