位置
|
时间域名
|
允许值
|
允许的特殊字符
|
1
|
秒
|
0-59
|
, - * /
|
2
|
分钟
|
0-59
|
, - * /
|
3
|
小时
|
0-23
|
, - * /
|
4
|
日期
|
1-31
|
, - * ? / L W C
|
5
|
月份
|
1-12
|
, - * /
|
6
|
星期
|
1-7
|
, - * ? / L C #
|
7
|
年(可选)
|
空值1970-2099
|
, - * /
|
今天项目中遇到了一个定时任务,想着做成每天凌晨0点10分开始执行,然后每半小时执行一次,本来想着特别简单,就是
0 10/30 0 * * ?
这种写法,结果找了一下网上的示例才发现这种写法的意思是:
每天0点10分到1点50每5分钟运行一次,
开始于00:10,结束于1:50;于是又改成
0 10/30 0-23 * * ? 这样总该对了把,发现还是不对,需要改成
0 10-59/30 0-23 * * ?
才可以达到自己想要的效果,结果同事说其实,还可以这样写
0 10,40 0-23 * * ? 效果一样,不过后来想了一下,如果是每5分钟一次,估计就得列很多数字了,所以,还是推荐使用范围的那种。这和Linux的crontab很相似的。
=======================================
以下是网上找的相关资料,仅供参考!
Cron表达式示例:
表达式
|
说明
|
"0 0 12 * * ? "
|
每天12点运行
|
"0 15 10 * * ?"
|
每天10:15运行
|
"0 15 10 * * ? 2011"
|
2011年的每天10:15运行
|
"0 * 14 * * ?"
|
每天14点到15点之间每分钟运行一次,开始于14:00,结束于14:59。
|
"0 0/5 14 * * ?"
|
每天14点到15点每5分钟运行一次,开始于14:00,结束于14:55。
|
"0 0/5 14,18 * * ?"
|
每天14点到15点每5分钟运行一次,此外每天18点到19点每5钟也运行一次。
|
"0 0-5 14 * * ?"
|
每天14:00点到14:05,每分钟运行一次。
|
"0 10,44 14 ? 3 WED"
|
3月每周三的14:10分到14:44,每分钟运行一次。
|
"0 15 10 ? * MON-FRI"
|
每周一,二,三,四,五的10:15分运行。
|
"0 15 10 15 * ?"
|
每月15日10:15分运行。
|
"0 15 10 L * ?"
|
每月最后一天10:15分运行。
|
"0 15 10 ? * 6L"
|
每月最后一个星期五10:15分运行。
|
"0 15 10 ? * 6L 2007-2009"
|
在2007,2008,2009年每个月的最后一个星期五的10:15分运行。
|
"0 15 10 ? * 6#3"
|
每月第三个星期五的10:15分运行。
|
每隔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 * * ?
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
Cron表达式Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成。Cron表达式时间字段(从左到右依次为): 位置时间域名允许值允许的特殊字符1秒0-59, - * /2分钟0-59, - * /3小时0-23
Cron
表达式
对定时器的
时间
进行控制
1 要使用
cron
表达式
需要引入spring的jar包
2 往往需要用
cron
相关的api对各种
时间
进行修改等操作,这里将你需要使用的
cron
表达式
来实例化
Cron
SequenceGenerator 才能使用
cron
的相关api
这里获取的
表达式
是 “0 */5 * * * ?” 表示
每隔
五
分
钟的意思
3 在这次遇到的需求中,需要使用
cron
表达式
来控制每5
分
钟执行一次
Date next =
cron
SequenceGenerator.next(format.
*:表示所有可能的值
/:表示数值的增量,简单来说,比如
分
写上0/5表示从0
分
开始,
每隔
5
分
钟
?:仅用在天(月)和天(周),表示不指定值,当其中一个有值时,另外一个需要设为?
字段允许字符
秒:0-59 , - * /
26:表示第26秒
cron
可以让系统在指定的
时间
,去执行某个指定的工作,我们可以使用
cron
tab指令来管理
cron
机制
cron
tab参数
-u:这个参数可以让我们去编辑其他人的
cron
tab,如果没有加上这个参数的话就会开启自己的
cron
tab
cron
tab -u 使用者名称
-l:可以列出
cron
tab的内容
-r:可以移除
cron
tab
-e:可以使用系统预设的编辑器,开启
cron
tab
因为在springboot项目的需要使用到@Scheduled(
cron
= “* */5 * * * ?”) //
每隔
五
分
钟统计一次
这种类型的
表达式
,虽然也有在线生成
cron
表达式
的网站:http://
cron
.qqe2.com/
但是还是专门去学习了一下,这里逻辑一些常用的
表达式
,方便日常使用。
import org.
quartz
.
Cron
Expression;
import java.text.ParseException;
import java.util.Date;
public class
Cron
Example {
public static void main(String[] args) {
String
cron
Expression = "0 0 12 * * ?";
try {
Cron
Expression
cron
= new
Cron
Expression(
cron
Expression);
Date nextValidTime =
cron
.getNextValidTimeAfter(new Date());
System.out.println("下一个执行
时间
:" + nextValidTime);
} catch (ParseException e) {
e.printStackTrace();
以上代码中,我们使用了
Quartz
框架中的
Cron
Expression类来解析
cron
表达式
,并获取下一个执行
时间
。