Java EE学习——Quartz的Cron表达式
经历过低谷后,还是要好好学习,越失落会越来越落后。
今天写一下Cron表达式的用法,虽然是之前自己写的,也过了挺长一段时间,这次就拿出来作为回顾吧。
Cron表达式是Quartz的精髓(个人觉得),比如我们想设定淘宝“秒杀”的那一秒时间,完全可以用下面的方法设置执行时间。
Calendar cal = Calendar.getInstance();
//设置将要发生的时间...
cal.set(Calendar.DATE, xxx);
//.......常规的生成scheduler和job
//Trigger设置为这个日期
Trigger trigger = TriggerBuilder.newTrigger().startAt(cal.getTime()).build();
//接着还是一般的流程
可以百度或者参加我前一篇博客《Java EE学习--Quartz基本用法》了解一下Quartz最简单的用法。
这里说到Cron表达式:比如公司每天上下班打卡,一周周末检查工作完成情况,网站每月统计用户数据,等等,这些情况想通过一个Date来设置,非常的麻烦,而且会开大量的实例,影响效率。
我们还是举一个最简单的例子,继承Job类,重写一个execute方法:
public class MyJob3 implements Job
{
public void execute(JobExecutionContext ctx) throws JobExecutionException
{
System.out.println("It's Time for me to run!!WUHA╰_╯");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("now time is:"+format.format(new Date()));
}
}
然后,使用CronTrigger来实现带Cron表达式的触发器:
public static void main(String[] args) throws Exception
{
SchedulerFactory factory = new StdSchedulerFactory();
Scheduler sche = factory.getScheduler(); JobDetail job = JobBuilder.newJob(MyJob3.class).build();
//cron表达式说明
/*
* 六个或七个单元
* 秒 分 时 月中天 月份 月中星期几 (年)
* 秒,分,时,天
* 字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * / * 符号说明
星号:表示任意时刻
问号:只能在日或周字段上使用,简单的理解就是日期和星期是有冲突的,指定其中一个的话,另外一个是没办法指定的,比如每个月12号和每个星期二,这两个是"互斥"的,不能用日期和周来指定所有“每个是星期二的12号”这个时间。
减号:范围,如 1-5秒
逗号:列表,如 1,5,10 秒
斜杠:等步长序列,如3/13秒 表示 3,16,29,42,55,3,16...
L:仅在日和周上支持,表示允许的最后一个值,注意不要让范围和列表与L连用
W:工作日
井号:为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
*/
//秒 分 时 月中天 月份 月中星期几 (年)
String cron = "0/10 * * 8W 8 ? 2008-2015"; CronTrigger trigger = TriggerBuilder.newTrigger().
withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();
System.out.println("now is:"+new Date());
sche.scheduleJob(job,trigger);
sche.start();
Thread.sleep(180*1000);
sche.shutdown();
}
很简单的把Cron用法在代码中的注释写了,大家可以在百度上搜索具体的用法,这里我复制别人的没有意思,可以参见http://xgw1008.blog.163.com/blog/static/567573562009316011544/
月份和日期都是从1开始的,不是从0,一般你常规认为的时间是几月几号,在Cron中就应该写多少。
以我的
0/10 * * 8W 8 ? 2008-2015
作说明:
从2008年到2015年(实际中年份可不写),8月份距离8号最近的工作日(几号后面加W,今天,如果是9W,那么还是取最近的工作日,还是今天),倒数第二个是?号表示和已经写上去的8号互斥,每时每分,从0秒开始每隔10秒触发(秒数除以10余0),效果如下:
now is:Fri Aug 08 10:07:41 CST 2014
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:07:50
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:08:00
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:08:10
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:08:20
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:08:30
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:08:40
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:08:50
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:09:00
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:09:10
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:09:20
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:09:30
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:09:40
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:09:50
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:10:00
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:10:10
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:10:20
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:10:30
It's Time for me to run!!WUHA╰_╯
now time is:2014-08-08 10:10:40
完全是按照已制定的想法来的,每隔10秒显示一次,Quartz的功能真的非常强大!
Java EE学习——Quartz的Cron表达式的更多相关文章
- Java EE学习--Quartz基本用法
新浪博客完全不适合写技术类文章.本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧.很多时候都在网上搜索别人的总结 ...
- Quartz 用 cron 表达式存放执行计划
Quartz 用 cron 表达式存放执行计划.引用了 cron 表达式的 CronTrigger 在计划的时间里会与 job 关联上. 1.Quartz cron 表达式支持七个域如下: 名称 是否 ...
- Java EE 学习(9):IDEA + maven + spring 搭建 web(5)- 博客文章管理
转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Jav ...
- Java EE 学习(8):IDEA + maven + spring 搭建 web(4)- 用户管理
转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava E ...
- Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库
参考: https://my.oschina.net/gaussik/blog/513444 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 ...
- Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring
参考:https://my.oschina.net/gaussik/blog/513353 注:此文承接上一文:Java EE 学习(5):IDEA + maven + spring 搭建 web(1 ...
- Java EE 学习(5):IDEA + maven + spring 搭建 web(1)
参考:http://www.cnblogs.com/lonelyxmas/p/5397422.html http://www.ctolib.com/docs-IntelliJ-IDEA-c--1590 ...
- Java EE 学习(4):IDEA + maven 搭建 web(2)
参考:http://www.bubuko.com/infodetail-1855067.html 现使用 Maven 创建项目:本节接Java EE 学习(3):IDEA + maven 搭建 web ...
- 作业调度框架 Quartz 学习笔记(三) -- Cron表达式 (转载)
前面两篇说的是简单的触发器(SimpleTrigger) , SimpleTrigger 只能处理简单的事件出发,如果想灵活的进行任务的触发,就要请出 CronTrigger 这个重要人物了. Cro ...
随机推荐
- 20135220谈愈敏Linux Book_4
进程调度 进程:程序的运行态表现形式 进程调度程序:确保进程能有效工作的一个内核子系统,决定将哪个进程投入运行.何时运行以及运行多长时间,在可运行态进程之间分配有限的处理器时间资源. 最大限度的利用处 ...
- openssl实践总结
openssl实验总结 OPENSSL简介 OpenSSL项目是一个协作开发一个健壮的,商业级的,全功能的,并且开放源代码工具包,它实现了安全套接字层(SSL v2/v3)和传输层安全(TLS v1) ...
- 中国IT 未来何在
许久之前,已对国内IT业的一些问题颇有看法,而今又恰逢360与AV-C的纠缠,实在忍不住要发发牢骚.IT在中国,发展不过二十来年,却以迅雷之速横扫各个领域,令人感叹,此成就是不可否认的:然而,发展 ...
- 记<<ssh穿透防火墙连接内网的机器(不用路由端口映射)>>
场景: 在家连接公司的内网服务器. 需求: 不用设置端口映射在家用putty登录公司内网服务器. 条件: 有一台公网服务器做转发,有开放端口的控制权.(公网服务器可以是阿里云ECS, 腾讯云主机这样的 ...
- 《TCP/IP详解卷1:协议》第19章 TCP的交互数据流-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- WebForm之Linq组合查询
组合查询 protected void Button1_Click(object sender, EventArgs e) { //默认查询所有,返回的是Table类型,转换成IQueryAble类型 ...
- js获取服务器时间戳
<!DOCTYPE html> <html> <head> <title>ajax</title> </head> <bo ...
- 警告: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:CurrencyClientServe
有的说: 在Servers视图里双击创建的server,然后在其server的配置界面中选中"Publish module contexts to separate XML files&qu ...
- BZOJ-1067 降雨量 线段树+分类讨论
这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...
- myeclipse 引入jar包 (包括 jdbc 驱动引用)
A.直接用MyEclipse里自带的相关的项目jar包,右击项目"MyEclipse"菜单,选择对应的jar包就OK了 B.添加外部的jar包到web项目的lib包下,右击项目&q ...