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. pip国内镜像(清华大学镜像)

    网上搜到的pip国内镜像大部分是豆瓣的 http://pypi.douban.com/simple/ 但是根本不全,很多包没有 所以推荐清华大学的 https://pypi.tuna.tsinghua ...

  2. BaseCommand

    import java.io.Serializable; import android.util.Log; public class BaseCommand implements Serializab ...

  3. 神奇的TextField(1)

    先看一大段测试代码,每个小方法的注释行是输出结果. private var text_content:TextField; private function textFieldDemo():void{ ...

  4. Python面对对象相关知识总结

    很有一段时间没使用python了,前两天研究微信公众号使用了下python的django服务,感觉好多知识都遗忘了,毕竟之前没有深入的实践,长期不使用就忘得快.本博的主要目的就是对Python中我认为 ...

  5. ActionContextCleanUp作用

    延长action中属性的生命周期,包括自定义属性,以便在jsp页面中进行访问,让actionContextcleanup过滤器来清除属性,不让action自己清除. 为了使用WebWork,我们只需要 ...

  6. JDBC 2 封装

    1 封装 新建类 DBConnUtil  ,新建database.properties 文件储存链接信息如下所示 jdbcDriver=com.mysql.jdbc.Driver jdbcUrl=jd ...

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

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

  8. Log4j日志配置说明

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  9. bzoj 3277 & bzoj 3473,bzoj 2780 —— 广义后缀自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3277 https://www.lydsy.com/JudgeOnline/problem.p ...

  10. 使用readelf和objdump解析目标文件 ***

    引言 本文是对程序员的自我修养:链接.装载与库中第3章的实践总结(和结构相关的示意图都是用Gliffy Diagrams画的