QUARTZ CRON
本文来自:http://www.blogjava.net/crazycy/archive/2013/06/06/400287.html
(URI:http://quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger)
对于第四个day of month 和 第六个 day of week常常需要花时间,这里做个简单总结
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ └───── day of week (0 - 7) (0 or 7 is Sun, or use names)
│ │ │ │ └────────── month (1 - 12)
│ │ │ └─────────────── day of month (1 - 31)
│ │ └──────────────────── hour (0 - 23)
│ └───────────────────────── min (0 - 59)
└──────────────────────── seconds
Wild-cards (the * character) can be used to say "every" possible value of this field.
Therefore the * character in the "Month" field simply means "every month".
A '*' in the Day-Of-Week field would therefore obviously mean "every day of the week".
The '?' character is allowed for the day-of-month and day-of-week fields.
It is used to specify "no specific value". This is useful when you need to specify something in one of the two fields, but not the other.
为了解释清楚“?"字符的使用,再来一段
Seconds YES 0-59 , - * /
Minutes YES 0-59 , - * /
Hours YES 0-23 , - * /
Day of month YES 1-31 , - * ? / L W
Month YES 1-12 or JAN-DEC , - * /
Day of week YES 1-7 or SUN-SAT , - * ? / L #
Year NO empty, 1970-2099 , - * /
可以看到只有第四、六两个位置允许使用"?"
这就说明这2个位置是相互依赖的
? ("no specific value") - useful when you need to specify something in one of the two fields in which the character is allowed, but not the other. For example, if I want my trigger to fire on a particular day of the month (say, the 10th), but don't care what day of the week that happens to be, I would put "10" in the day-of-month field, and "?" in the day-of-week field. See the examples below for clarification.
所以一旦用了"?",就说明这个字段不起作用了,对应的另一个字段起作用;
所以:
1. 配置一个任务在每天凌晨2点运行做出截止到当日的报表,但是周末因为没人值班所以不需要生成报表,这个表达式就是
0 0 2 ? * MON-FRI
2. 配置一个任务在每个月的最后一天夜里11点运行
0 0 23 L * ?
如果想用数据库驱动这个时间怎么办呢?请问下面大虾的做法:
Hello,
I got almost similar requirement, making the schedulers as DB driven, and handled it in the following way.
I created a new UI that takes start time & interval time and saves them in DB. Then a method is called to refresh the given jobs/schedulers.
Here is the snippet.
Code:
try {
scheduler = (StdScheduler) context.getBean(schedulerVO.getSchedulerName());
triggerNames = new String[] {};
if (scheduler != null) {
try {
// throws SchedulerException
triggerNames = scheduler.getTriggerNames("DEFAULT");
triggerName = triggerNames.length > 0 ? triggerNames[0] : "";
trigger = (CronTrigger) scheduler.getTrigger(triggerName, "DEFAULT");
if (trigger != null) {
// throws ParseException
trigger.setCronExpression(getCronExpression(schedulerVO.getStartTime(), schedulerVO.getInterval()));
// throws SchedulerException
scheduler.rescheduleJob(triggerName, "DEFAULT",trigger);
}
} catch (SchedulerException e) {
logger.error(e);
} catch (ParseException e) {
logger.error(e);
}
}
} catch (NoSuchBeanDefinitionException e) {
logger.error(e);
}
Computing the cronExpression with this method.
Code:
private String getCronExpression(String startTime, String interval) {
String cronExpression = "";
if ("0".equals(startTime) || "0".equals(interval)) {
// default trigger runs at 10AM & 10PM
cronExpression = "0 0 10/12 * * ?";
} else {
cronExpression = "0 0 " + startTime + "/" + interval + " * * ?";
}
return cronExpression;
}
As I need to run the job every day and not concerned about minutes the above approach worked for me.
Hope this gives an idea to you.
Regards
Siva Krishna.
QUARTZ CRON的更多相关文章
- Quartz Cron 触发器 Cron Expression 的格式
转自:http://blog.csdn.net/yefengmeander/article/details/5985064 上一文中提到 Cron触发器可以接受一个表达式来指定执行JOB,下面看看这个 ...
- Quartz Cron表达式的二三事
最近在解决产品上的一个需求,就是定期生成报告(Report),我们叫做Scheduled Report. 原理:UI获取用户输入的时间信息,后台使用Spring框架设置定时任务,这里定时任务用的就是 ...
- Spring 调度工具Quartz cron 表达式的格式
http://chinaxxren.iteye.com/blog/839630 Quartz cron 表达式的格式十分类似于 UNIX cron 格式,但还是有少许明显的区别.区别之一就是 Quar ...
- Quartz cron 表达式(linux 定时器,java 定时任务,spring task定时任务)
原文地址:https://blog.csdn.net/feng27156/article/details/39293403 Quartz cron 表达式的格式十分类似于 UNIX cron 格式,但 ...
- Quartz 之Quartz Cron表达式
说到这个Quartz了,必不可少的就要说到我们的Triggger触发器,相信大家也都知道,我们在之前也说过了,Trigger又有两个子类,也就是两种方式,分别是:SimpleTrigger和CronT ...
- Quartz Cron表达式生成器
格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0 ...
- Quartz Cron表达式 每周、每月执行一次
原文:https://blog.csdn.net/qq_33432559/article/details/75633767 系统中通常有些需要自动执行的任务,这些任务可能每隔一段时间就要执行一次,也可 ...
- [quartz] - Cron表达式举例
Quartz是一个任务调度框架.比如你遇到这样的问题 想每月25号,信用卡自动还款 想每年2月14日自己给当年暗恋女神发一封匿名贺卡 想每隔1小时,备份一下自己的SpringCloud学习笔记到云盘 ...
- quartz cron表达式在线生成
近期使用了quartz定时器,有感于起cron表达式有点复杂.且无法实时推断定时时间是否正确,因此写了个在线表达式及依据表达式获得前10次运行时间. 訪问地址例如以下:http://cron.g2ro ...
随机推荐
- SEXTANTE中调用任意C++控制台程序的简单例子
在sextante中单纯利用python或者调用sextante已有算法进行自定义开发,很多情况下速度不咋给力,同样的操作调用QGIS的C++插件比用sextante里的算法要快,有时候快的 还不止一 ...
- [Hapi.js] Logging with good and good-console
hapi doesn't ship with logging support baked in. Luckily, hapi's rich plugin ecosystem includes ever ...
- NET基础课-- 类型基础(NET之美)
1.类型:值类型 引用类型. 分类依据:类型在内存的分配方式.值类型在堆栈,引用类型在托管堆. 名词:栈--所有变量都会被分配在栈上,只不过值类型直接含有数据,引用类型含有一个指向托管堆对象的地址. ...
- 2个或多个datable类似于sql inner join 合并查询
public static DataTable DatableInnerJoin(DataTable FirstTB, DataTable SecondTB, DataColumn[] FJC, Da ...
- PHP学习笔记十九【析构函数】
<?php class Person{ public $name; public $age; public function __construct($iname,$iage) { $this- ...
- C# socket网络编程 基于TCP协议
socket 服务器端: 1.创建socket Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ...
- 编写简单的 NT 式驱动程序的加载与卸载工具
写驱动的加载需要用到五个函数: OpenSCManager() CreateService() OpenService() StartService() CloseServiceHandle() 这五 ...
- user密码
一.修改密码 alter user hr identified by hr; password/passw hr: SYS@test>password hr Changing password ...
- WordPress插件制作笔记(三)---Stars Comments Article
wp 文章星级评价 插件 下载地址4:http://pan.baidu.com/s/1eQnGIGU [articles_star_vote_score_optiontable_serialize_c ...
- ReferenceError: $ is not defined
蛋疼的问题,原因是jquery导入顺序不对,任何页面都必须把jquery的导入放在首位,js文件放在其次.