CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,如每月8日发工资的定时任务。

CronTrigger,你可以指定触发的时间表如“每星期五中午”,或“每个工作日9:30时”,甚至“每5分钟一班9:00和10:00逢星期一上午,星期三星期五“。



一、Cron Expressions



cron的表达式被用来配置CronTrigger实例。 cron的表达式是字符串,实际上是由七子表达式,描述个别细节的时间表。这些子表达式是分开的空白,代表:



1.        Seconds

2.        Minutes

3.        Hours

4.        Day-of-Month

5.        Month

6.        Day-of-Week

7.        Year (可选字段)

例  "0 0 12 ? * WED" 在每星期三下午12:00 执行,





个别子表达式可以包含范围, 例如,在前面的例子里("WED")可以替换成 "MON-FRI", "MON, WED, FRI"甚至"MON-WED,SAT".





“*” 代表整个时间段.

每一个字段都有一套可以指定有效值,如

Seconds (秒)         :可以用数字0-59 表示,

Minutes(分)          :可以用数字0-59 表示,

Hours(时)             :可以用数字0-23表示,

Day-of-Month(天) :可以用数字1-31 中的任一一个值,但要注意一些特别的月份



Month(月)            :可以用0-11 或用字符串  “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC” 表示



Day-of-Week(每周):可以用数字1-7表示(1 = 星期日)或用字符口串“SUN, MON, TUE, WED, THU, FRI and SAT”表示



“/”:为特别单位,表示为“每”如“0/15”表示每隔15分钟执行一次,“0”表示为从“0”分开始, “3/20”表示表示每隔20分钟执行一次,“3”表示从第3分钟开始执行



“?”:表示每月的某一天,或第周的某一天



“L”:用于每月,或每周,表示为每月的最后一天,或每个月的最后星期几如“6L”表示“每月的最后一个星期五”



“W”:表示为最近工作日,如“15W”放在每月(day-of-month)字段上表示为“到本月15日最近的工作日”



““#”:是用来指定“的”每月第n个工作日,例 在每周(day-of-week)这个字段中内容为"6#3" or "FRI#3" 则表示“每月第三个星期五”



1)Cron表达式的格式:秒 分 时 日 月 周 年(可选)。



               字段名                 允许的值                        允许的特殊字符  

               秒                         0-59                               , - * /  

               分                         0-59                               , - * /  

               小时                     0-23                               , - * /  

               日                         1-31                               , - * ? / L W C  

               月                         1-12 or JAN-DEC         , - * /  

               周几                     1-7 or SUN-SAT           , - * ? / L C #  

               年 (可选字段)     empty, 1970-2099      , - * /



               “?”字符:表示不确定的值





               “,”字符:指定数个值





               “-”字符:指定一个值的范围





               “/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m





               “L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X





               “W”字符:指定离给定日期最近的工作日(周一到周五)





               “#”字符:表示该月第几个周X。6#3表示该月第3个周五



2)Cron表达式范例:



                 每隔5秒执行一次:*/5 * * * * ?



                 每隔1分钟执行一次:0 */1 * * * ?



                 每天23点执行一次:0 0 23 * * ?



                 每天凌晨1点执行一次:0 0 1 * * ?



                 每月1号凌晨1点执行一次:0 0 1 1 * ?



                 每月最后一天23点执行一次:0 0 23 L * ?



                 每周星期天凌晨1点实行一次:0 0 1 ? * L



                 在26分、29分、33分执行一次:0 26,29,33 * * * ?



                 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?



二、CronTrigger使用(用的spring3.1.3套jar包 和  quartz-1.7.3.jar)



  1) 配置文件application-quartz.xml内容如下




<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">



<bean id = "testSyncTask"   class = "com.quartz.TestSyncTask"></bean>

<!-- 需要被定时执行的任务 -->

<!-- spring的quartz中,将任务和触发器集成,testTask为复杂触发器-->

<bean id="testTask" class="org.springframework.scheduling.quartz.CronTriggerBean">

           <property name="cronExpression" value="0 1 18 20 * ?" />

           <property name="jobDetail">

               <bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

      <property name="targetObject" ref="testSyncTask"/><!-- testSyncTask真正的任务类-->

<property name="targetMethod" value="printTask" /><!-- testSyncTask真正的任务类方法-->

</bean>

</property>

</bean>





<!-- 定时任务列表 -->

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="configLocation" value="classpath:springquartz.properties" />

<property name="triggers">

<list> 

<ref bean="testTask" />

</list>

</property>

</bean>

</beans>



 2)TestSyncTask 类:

public class TestSyncTask {



public void printTask() throws JobExecutionException {

System.out.println("任务正在执行,执行时间: " + Calendar.getInstance().getTime());

for( int i = 0; i < 10; i++){

System.out.println("这是数字: "+i);

}

}



public static void main(String[] args) throws Throwable {



ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-quartz.xml");

TestSyncTask t = (TestSyncTask) applicationContext.getBean("testSyncTask");

        t.printTask();

}

}





3)springquartz.properties内容如下:




org.quartz.scheduler.instanceName = Schedule

org.quartz.scheduler.instanceId = 1

org.quartz.scheduler.rmi.export = false  

org.quartz.scheduler.rmi.proxy = false

   

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool  

org.quartz.threadPool.threadCount = 4

   

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

CronTrigger表达式和Quartz使用实例入门的更多相关文章

  1. Quartz任务调度快速入门

    Quartz任务调度快速入门 概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的 ...

  2. Quartz应用实践入门案例二(基于java工程)

    在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...

  3. Quartz任务调度快速入门(转)

    转自http://www.blogjava.net/baoyaer/articles/155645.html 概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调 ...

  4. Quartz任务调度快速入门(转)

    概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述: ●Jo ...

  5. Quartz.NET快速入门指南

    最近,在工作中遇到了 Quartz.net 这个组件,为了更好的理解项目代码的来龙去脉,于是决定好好的研究一下这个东西.确实是好东西,既然是好东西,我就拿出来分享一下.万丈高楼平地起,我们也从入门开始 ...

  6. Quartz.NET基础入门

    Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和 ...

  7. Quartz应用实践入门案例一(基于Web环境)

    Quartz是一个完全由java编写的开源作业调度框架,正是因为这个框架整合了许多额外的功能,所以在使用上就显得相当容易.只是需要简单的配置一下就能轻松的使用任务调度了.在Quartz中,真正执行的j ...

  8. 定时执行程序-Quartz简单实例

    1.加jar包:Quartz自己quartz-1.8.3.jar和依赖包commons-logging.jar  .slf4j-log4j12-1.5.10.jar .slf4j-api-1.5.10 ...

  9. XML实例入门2

    工具:notepad++.VS2008(MSXML6.0) 来自msdn的例子(经过修改,因为升级到MSXML6.0,有些关键字不太一样了), 需要文件books.xml,books.vsd(博客只支 ...

随机推荐

  1. 用百度地图API打造方便自己使用的手机地图

    有钱人咱就不说了,因为偶是个穷银--因为穷,所以去年买的Huawei C8650+到现在还在上岗,对于没有钱买好的配置的手机的童鞋来说,类似于百度,谷歌,高德等商家的地图在自己的机器上跑起来确实是有点 ...

  2. HAWQ取代传统数仓实践(七)——维度表技术之维度子集

    有些需求不需要最细节的数据.例如更想要某个月的销售汇总,而不是某天的数据.再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等.此时事实数据需要关联到特定的维度,这些特定维度包含在从细节维度 ...

  3. How your script code be coverted into arm code and running on ios.

    Your script code is compiled into DLLs (assemblies) by the editor. When you build for iOS, these ass ...

  4. everything 全盘文件查找工具及正则表达式的使用

    首先需要开启 everything 工具在(字符串)查找时,对正则表达式功能的支持: [菜单栏]⇒ [Search]⇒ 勾选[Enable Regex] ctrl + i:字符大小写敏感/不敏感 1. ...

  5. shell 中并发执行

    http://bbs.51cto.com/thread-1104907-1-1.html http://www.51testing.com/html/28/116228-238978.html htt ...

  6. 深入了解ZooKeeper(一)

    在上篇博客ZooKeeper初探之安装和配置中已经对Zookeeper这个“服务协调者”有了初步的认识和了解,一个字“美”,接下来开始深入的交往,开始了解其内心世界! 1. 内容思维导图 2. 分布式 ...

  7. asp.net core microservices 架构之 分布式自动计算(二)

    一  简介                   上一篇介绍了zookeeper如何进行分布式协调,这次主要讲解quartz使用zookeeper进行分布式计算,因为上一篇只是讲解原理,而这次实际使用, ...

  8. TCP传输控制协议

    TCP 在TCP/IP协议模型中, 传输层协议有TCP和UDP, 这里主要介绍下可靠传输TCP协议, 目前是传输层协议首选. 特点 面向数据流(字节流形式) 虚电路连接 有缓冲传输(提供push机制 ...

  9. matlab与modelsim中的文件操作函数

    matlab中 fscanf和fpintf是一对,用fprintf写的必须用fscanf来读. fread和fwrite是一对,用fwrite写的必须用fread来读. 同样的数据,使用fprintf ...

  10. ACM学习历程—HihoCoder1309任务分配(排序 && 贪心)

    http://hihocoder.com/problemset/problem/1309 题目大意是给定n个任务的起始时间,求问最少需要多少台机器. 有一个贪心的策略就是,如果说对于一个任务结束,必然 ...