第二个要介绍的任务调度器中的触发器是 CronTrigger ,相比较 SimpleTrigger 来说,CronTrigger 相对灵活,对于复杂的业务需求来说,更加的实用。要在使用 CronTrigger 之前,要先介绍下 Cron 表达式。在这里,Cron 表达式的内容使用网上的介绍,理论性的东西,大致都是差不多的。

Cron 表达式的内容如下:

其中,表达式中的特殊符号的意义是:

“?”字符:表示不确定的值(注意:? 号只能用在日和周域上,但是不能在这两个域上同时使用。假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?,如:0 0 0 * * ?)

“,”字符:指定数个值

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

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

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

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

“#”字符:表示该月第几个周X。5#2表示该月第2个周四(每周的第一天是从周日开始的,即:周日的值为:1)

简单的使用 Cron 的示例如下:

在每个周一,二, 三和周四的 10:15 AM 0 15 10 ? * MON-FRI
每月10号的 10:15 AM   0 15 10 10 * ?
每月最后一天的 10:15 AM 0 15 10 L * ?
每月最后一个周五的 10:10 AM  0 10 10 ? * 6L
在 2014, 2015, 2016, 和 2017 年中的每月最后一个周五的 10:10 AM  0 10 10 ? * 6L 2014-2017
每月第三个周五的 10:15 AM 0 15 10 ? * 6#3
每月从第一天算起每五天的 12:00 PM (中午) 0 0 12 1/5 * ?
每一个 11 月 11 号的 11:11 AM 0 11 11 11 11 ?
三月份每个周三的 2:10 PM 和 2:44 PM 0 10,44 14 ? 3 WED

但是,如果我想执行:14:00 开始,到 07:00结束的话,不能用单纯的时间间隔了。因为,在跨越了天的情况下,是会出现问题或者没有执行指定的操作的。那这样的话,可以分开执行的,

如:14:00-07:00的写法是:先执行当天的:* * 14-23 * * ?,再执行第二天的:* * 0-6 * * ?,二者触发的是同一个作业。

  基本的知识介绍完了之后,下面是我自己写的一个简单实用 CronTrigger 的例子,还是和之前的例子类似,2.0.0之后的用法,和2.0.0之前的用法,还是有所区别的。

(1)首先是作业(Job)类

/**
* 0.0.0.1
*/
package com.test.common.quartz; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; /**
* 简单的 作业类
* @author 高青
* 2014-3-24
*/
public class QuartzCronTiggerJob implements Job{ @Override
public void execute(JobExecutionContext jobContext) throws JobExecutionException {
System.out.println("这是一个 cronTrigger 的测试类"); //这里可以执行具体的业务操作.......
}
}

(2)任务调度器

/**
* 0.0.0.1
*/
package com.test.common.quartz; import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; /**
* cronTrigger 触发器的测试类
* @author 高青
* 2014-3-26
*/
public class QuartzCronTiggerJobTest { /**
* 主线程方法
* @author 高青
* 2014-3-26
* @param args 字符串参数
* @return 空
*/
public static void main(String[] args) { try {
//得到默认的调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); //定义当前调度器的具体作业对象
JobDetail jobDetail = JobBuilder.
newJob(QuartzCronTiggerJob.class).
withIdentity("cronTriggerDetail", "cronTriggerDetailGrounp").
build();
//定义当前具体作业对象的参数
JobDataMap jobDataMap = jobDetail.getJobDataMap();
jobDataMap.put("name", "cronTriggerMap");
jobDataMap.put("group", "cronTriggerGrounp"); //作业的触发器
CronTrigger cronTrigger = TriggerBuilder.                      //和之前的 SimpleTrigger 类似,现在的 CronTrigger 也是一个接口,通过 Tribuilder 的 build()方法来实例化
newTrigger().
withIdentity("cronTrigger", "cronTrigger").
withSchedule(CronScheduleBuilder.cronSchedule("0 48 14 * * ?")). //在任务调度器中,使用任务调度器的 CronScheduleBuilder 来生成一个具体的 CronTrigger 对象
build();
//注册作业和触发器
scheduler.scheduleJob(jobDetail, cronTrigger); //开始调度任务
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}

上面就是 2.0 版本的 CronTrigger 的简单使用,可以根据具体的业务,再具体的进行任务的调度操作。

Quartz_2_简单编程式任务调度使用(CronTrigger)的更多相关文章

  1. Quartz_1_简单编程式任务调度使用(SimpleTrigger)

    最近在工作中,要做定时任务的更能,最开始的时候,想到的是 JavaSE 中,自带 Timer 及 TimerTask 联合使用,完成定时任务.最后发现,随着业务的复杂,JDK 中的 Timer 和 T ...

  2. Spring事务管理的另一种方式--TransactionTemplate编程式事务管理简单入门

    1, 一直以来, 在用Spring进行事物管理时, 只知道用声明式的策略, 即根据不同的数据源, 配置一个事物管理器(TransactionManager), 通过配置切面(PointCut)应用到相 ...

  3. Spring4.0编程式定时任务配置

    看过很多定时调度的配置,大多使用XML配置,觉得比较麻烦,也比较老套.这里介绍一种基于spring4.0注解编程式配置定时任务,简单清晰,使用方便.. 至于引入spring相关jar这里不多说,直接切 ...

  4. 全面分析 Spring 的编程式事务管理及声明式事务管理

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  5. Spring学习8-Spring事务管理(编程式事务管理)

    一.Spring事务的相关知识   1.事务是指一系列独立的操作,但在概念上具有原子性. 比如转账:A账号-100, B账号+100,完成.这两个操作独立是没问题的. 但在逻辑上,要么全部完成,要么一 ...

  6. 全面分析 Spring 的编程式事务管理及声明式事务管理--转

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  7. Spring事务管理的实现方式:编程式事务与声明式事务

    1.上篇文章讲解了Spring事务的传播级别与隔离级别,以及分布式事务的简单配置,点击回看上篇文章 2.编程式事务:编码方式实现事务管理(代码演示为JDBC事务管理) Spring实现编程式事务,依赖 ...

  8. Spring事务管理的实现方式之编程式事务与声明式事务详解

    原创说明:本博文为原创作品,绝非他处转载,转载请联系博主 1.上篇文章讲解了Spring事务的传播级别与隔离级别,以及分布式事务的简单配置,点击回看上篇文章 2.编程式事务:编码方式实现事务管理(代码 ...

  9. 春天的事务之9.3编程式事务 - 跟我学spring3

    9.3编程式事务 9.3.1编程式事务概述 所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理. Spring框架提供一致的事务抽象,因此对于JDBC还是JTA事务都是采用相同 ...

随机推荐

  1. 虚拟路由冗余协议VRRP

    一.VRRP简介 虚拟路由冗余协议VRRP(Virtual Router Redundancy Protocol)通过把几台路由设备联合组成一台虚拟的路由设备,将虚拟路由设备的IP地址作为用户的默认网 ...

  2. Mac环境下PHPstorm配置xdebug开发调试web程序

    一.安装PHP的xdebug扩展 安装xdebug(技巧,为了找到适配的版本,让xdebug网站根据phpinfo()函数输出分析找到对应的方法及安装步骤:如果安装了多个PHP版本的话,尽量用phpi ...

  3. php处理字符串格式的计算表达式

    有时候我们对每一种产品都有一个提成公式,而这个计算提成的公式是以字符串格式存在表中的 当我们用这个计算公式时,他并不像我们写的:$a=2+3*5;这样简单的能计算出结果,而它是个字符串 所以,我们就必 ...

  4. Django在Eclipse下配置启动端口号

    首先,在Eclipse左侧树形菜单中找到要更改端口号的项目: 然后,在这里右键选择属性,打开属性界面之后选择Run/Debug Setting,并在其中找到已有的启动项,如果没有可以新建或启动一次. ...

  5. (转)Inno Setup入门(二十)——Inno Setup类参考(6)

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17251041 存储框 存储框也是典型的窗口可视化组件,同编辑框类似, ...

  6. Ubuntu12.10下Python(cx_Oracle)访问Oracle解决方案

    第一步:下载安装cx_Oracle 下载地址:http://sourceforge.net/projects/cx-oracle/files/5.1.2/,下载cx_Oracle的rmp安装文件,注意 ...

  7. Linux系统启动流程与系统目录

    启动流程 # 1,开机BIOS自检 检查一系列的硬件,最后根据启动顺序启动,是硬盘还是光驱等 # 2,MBR引导 读硬盘0柱面0磁道1扇区的前446字节 1扇区=512字节 MBR=4446字节 四个 ...

  8. 【语音识别】Microsoft Speech Platform 自学笔记2 环境要求与安装过程

    笔记人:又吹风 时 间:2012/12/16 主要内容:Microsoft Speech Platform的环境要求与安装过程. 上次也说过了,当前Microsoft Speech Platform最 ...

  9. SpringMVC传统风格控制器和基于注解的控制器

    SpringMVC的DispatcherServlet 之前说过springMVC是使用Servlet作为控制器,就是这个用于调度的DispatcherServlet了.这个是servlet,可以根据 ...

  10. Android:不同drawable文件夹的区别

    4.0后,新建android工程,会自动生成drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi,drawable-xxh ...