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. MyEclipse Tern was unable to complete your request in time

    1.错误描述 2.错误原因 由错误提示可知,是由于MyEclipse Tern不能及时完成回复 3.解决办法 (1)Window--->Preferences--->MyEclipse-- ...

  2. .net 系列化与反序列化(转载)

    .net序列化及反序列化 转载自:http://www.cnblogs.com/Tim_Liu/archive/2010/11/09/1872587.html 序列化是指一个对象的实例可以被保存,保存 ...

  3. CodeForces - 622F:The Sum of the k-th Powers (拉格朗日插值法求自然数幂和)

    There are well-known formulas: , , . Also mathematicians found similar formulas for higher degrees. ...

  4. 51nod 1995 三子棋

    小的时候大家一定玩过“井”字棋吧.也就是在九宫格中,只要任意行.列,或者任意连续对角线上面出现三个相同的,就能获胜.现在小明和小花也在玩三子棋,但是他们不是在九宫格里,而是在3×4的格子里面.现在小明 ...

  5. 关于djangoadmin的一个博客

    http://www.cnblogs.com/linxiyue/category/569717.html

  6. 阿里云接口异常-Can not find endpoint to access

    最近在做公司的资产盘点,需要请求阿里云的接口获取公司的云服务器信息.在获取实例列表的过程中,通过异常机制捕获了 Can not find endpoint to access 这个错误.经过多次排查, ...

  7. 如何禁用 FastAdmin 双击编辑功能?

    如何禁用 FastAdmin 双击编辑功能? 新版 (1.0.0.20180513_beta)增加一个新功能,可以禁止双击编辑. 很多人还是喜欢双击选中复制,默认的双击编辑还是不怎么习惯. 可以以下文 ...

  8. (转)Android高性能编程(2)--延迟初始化

    上一篇文章,讲到了很多Android应用开发中需要注意的性能和内存方面的技巧.这一篇文章就是从smali指令级来分析性能优化和内存优化的问题. 如何解决界面启动时间开销大的问题 我们在编写Androi ...

  9. Java Integer和String内存存储

    标签: java内存string 2016-01-10 12:51 1545人阅读 评论(2) 收藏 举报  分类: Java(7)  版权声明:本文为博主原创文章,未经博主允许不得转载. 先看代码: ...

  10. EasyWeChat微信开放平台第三方平台接入

    EasyWeChat微信开放平台第三方平台接入 https://www.cnblogs.com/bainiu/p/8022729.html