quartz corn参数配置 复杂表达式
Quartz学习--quartz基本介绍和Cron表达式

Quartz学习--quartz基本介绍和Cron表达式表名称说明qrtz_blob_triggers Trigger作为Blob类型存储(⽤于Quartz⽤户⽤JDBC创建他们⾃⼰定制的Trigger类型,JobStore 并不知道如何存储实例的时候)qrtz_calendars以Blob类型存储Quartz的Calendar⽇历信息, quartz可配置⼀个⽇历来指定⼀个时间范围负责执⾏向QuartzScheduler注册的触发Trigger的⼯作线程ThreadPool :Scheduler使⽤⼀个线程作为任务运⾏的基础设施,任务通过共享线程池中的线程提⾼运⾏效率QuartzSchedulerResources :包含穿件QuartzScheduler实例所需的所有资源(JobStore,ThreadPool等)JobStore :通过类实现的接⼝,这些类要为org.quartz.core.QuartzScheduler的使⽤提供⼀个org.quartz.Job和org.quartz.Trigger存储机制.作业和触发器的存储应该以其名称和组的组合为唯⼀性QuartzScheduler :Quartz的核⼼,他是org.quartz.Scheduler接⼝的间接实现,包含调度org.quartz.Jobs ,注册org.quartz.JobListener实例等的⽅法Scheduler :这是Quartz Scheduler的主要接⼝,代表⼀个独⽴运⾏容器. 调度程序维护JobDetails和触发器的注册表.⼀旦注册,调度程序负责执⾏作业,当她们的相关连的触发器触发(当她们的预定时间到达时 )Trigger:具有所有触发器通⽤属性的基本接⼝,描述了job执⾏的时间触发规则,使⽤TriggerBuilder实例化实际触发器JobDetail :传递给定作业实例的详细信息属性.JobDetails将使⽤JobBuilder创建/定义Job :表⽰要执⾏的"作业"的类的实现接⼝.只有⼀个⽅法:void execute(JobExecutionContext context);(JobExecutionContext 提供调度上下⽂各种信息,运⾏时数据保存在jobDataMap中 )Job 有个⼦接⼝StatefulJob,代表没有状态任务有状态任务不可并发,前次任务没有执⾏完,后⾯任务则⼀直处于阻塞等待状态2. ⼀个job可以被多个Trigger 绑定,但是⼀个Trigger只能绑定⼀个job!7. quartz.properties Quartz可更改配置//调度标识名集群中每⼀个实例都必须使⽤相同的名称(区分特定的调度器实例)org.quartz.scheduler.instanceName:DefaultQuartzScheduler//ID设置为⾃动获取每⼀个必须不同(所有调度器实例中是唯⼀的)org.quartz.scheduler.instanceId :AUTO//数据保存⽅式为持久化org.quartz.jobStore.class :org.quartz.impl.jdbcjobstore.JobStoreTX//表的前缀org.quartz.jobStore.tablePrefix : QRTZ_//设置为TRUE不会出现序列化⾮字符串类到 BLOB 时产⽣的类版本问题//eProperties : true//加⼊集群 true 为集群 false不是集群org.quartz.jobStore.isClustered : false//调度实例失效的检查时间间隔org.quartz.jobStore.clusterCheckinInterval:20000//容许的最⼤作业延长时间org.quartz.jobStore.misfireThreshold :60000//ThreadPool 实现的类名org.quartz.threadPool.class:org.quartz.simpl.SimpleThreadPool//线程数量org.quartz.threadPool.threadCount : 10//线程优先级org.quartz.threadPool.threadPriority : 5(threadPriority 属性的最⼤值是常量 ng.Thread.MAX_PRIORITY,等于10。
quartz cron 表达式详解

quartz cron 表达式详解字段允许值允许的特殊字符秒0-59 , - * /分0-59 , - * /小时0-23 , - * /日期1-31 , - * ? / L W C月份1-12 或者JAN-DEC , - * /星期1-7 或者SUN-SAT , - * ? / L C #年(可选)留空, 1970-2099 , - * /“*”字符被用来指定所有的值。
如:”*“在分钟的字段域里表示“每分钟”。
“?”字符只在日期域和星期域中使用。
它被用来指定“非明确的值”。
当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。
看下面的例子你就会明白。
月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号(?)来表明不想设置那个字段。
“-”字符被用来指定一个范围。
如:“10-12”在小时域意味着“10点、11点、12点”。
“,”字符被用来指定另外的值。
如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”。
“/”字符用于指定增量。
如:“0/15”在秒域意思是没分钟的0,15,30和45秒。
“5/15”在分钟域表示没小时的5,20,35和50。
符号“*”在“/”前面(如:*/10)等价于0在“/”前面(如:0/10)。
记住一条本质:表达式的每个数值域都是一个有最大值和最小值的集合,如:秒域和分钟域的集合是0-59,日期域是1-31,月份域是1-12。
字符“/”可以帮助你在每个字符域中取相应的数值。
如:“7/6”在月份域的时候只有当7月的时候才会触发,并不是表示每个6月。
L是…last‟的省略写法可以表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天。
如果在day-of-week域表示…7‟或者…SAT‟,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如…6L‟就表示一个月的最后一个星期五。
quartzcron表达式在线生成

quartzcron表达式在线⽣成最近使⽤了quartz定时器,有感于起cron表达式有点复杂,且⽆法实时判断定时时间是否正确,因此写了个在线表达式及根据表达式获得前10次执⾏时间。
使⽤如下:打开主页如下:点击cron配置或点击菜单栏,则进⼊到cron表达式配置界⾯:界⾯分为5个部分:1、菜单栏、2、设置内容区、3、设置结果展⽰区、4、⽣成表达式展⽰区、5、表达式触发时间展⽰区。
Ø 菜单栏:展⽰cron表达式需要设置的字段项;Ø 设置内容区:此区域为设置字段项的具体值,根据不同选择展⽰不同的设置内容;Ø 设置结果展⽰区:显⽰各个字段项设置的结果值;Ø ⽣成表达式展⽰区:显⽰设置完成并点击“完成设置”按钮后的cron表达式;Ø 表达式触发事件展⽰区:此区域显⽰的是cron表达式触发的前10个时间点。
注:此区域的显⽰需要部署到服务器才能显⽰,否则是会出错的。
1. 字段项配置点击左边菜单栏的cron配置项,设置秒、分、时、⽇、周、⽉、年七个字段项的值。
点击选择的字段项之后,会出现设置该字段项的内容页⾯,如我们选择了“⽇”字段项,则出现设置的详细页⾯:如图,是选择了“⽇”字段项之后出现的设置⽇字段的界⾯,可以在⽇字段项的项有7个,选择设置的单选框,会出现具体的设置值的控件。
如上图,选择了设置指定⽇触发,则出现指定⽇的多选框选择。
⿏标移动到⼩灯泡图标,则会显⽰此设置的相关说明。
设置完⼀项,需要点击上⽅的“应⽤”按钮,使得设置的值⽣效。
同时会把设置的值更新到右边控制台的设置结果展⽰区。
2. ⽣成cron表达式当所有需要设置的值都设置完成后,点击“完成设置”按钮,,则会在右边的控制台⽣成cron表达式,如果部署在服务器(如tomcat),则会显⽰设置的计划触发的前10次时间。
当没有部署时,不会显⽰触发⽰例下的触发时间。
3. 解析cron表达式解析cron表达式是输⼊表达式,解析到设置结果展⽰区和字段项的设置界⾯上。
Quartz触发器表达式语法

Cron表达式被用来配置CronTrigger实例。
Cron表达式是一个字符串,字符串以5或6个空格隔开,分开为6或7个域,每一个域代表一个含义。
Cron有如下两种语法格式:Seconds Minutes Hours DayofMonth Month DayofWeek Year 或Seconds Minutes Hours DayofMonth Month DayofWeek每个子表达式都描述了一个单独的日程细节。
这些子表达式用空格分隔,分别表示:1.Seconds 秒,可出现,- * / 四个字符,有效范围为0-59的整数2.Minutes 分钟,可出现,- * / 四个字符,有效范围为0-59的整数3.Hours 小时,可出现,- * / 四个字符,有效范围为0-23的整数4.Day-of-Month 月中的天,可出现,- * / ? L W C八个字符,有效范围为0-31的整数5.Month 月,可出现,- * / 四个字符,有效范围为1-12的整数或JAN-DEc6.Day-of-Week 周中的天,可出现,- * / ? L C #八个字符,有效范围为1-7的整数或SUN-SAT两个范围。
1表示星期天,2表示星期一,依次类推7.Year (optional field) 年(可选的域),可出现,- * / 四个字符,有效范围为1970-2099年每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是:(1)*:表示匹配该域的任意值,假如在Minutes域使用*,即表示每分钟都会触发事件。
(2)?:只能用在DayofMonth和DayofWeek两个域。
它也匹配域的任意值,但实际不会。
因为DayofMonth和DayofWeek会相互影响。
例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法:13 13 15 20 * ?,其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。
quartz的cron表达式

quartz的cron表达式Quartz的Cron表达式简介1. 什么是Cron表达式Cron表达式是一种用于定时任务调度的标准格式。
在Quartz框架中,Cron表达式被广泛使用,用于设置任务的执行时间。
2. Cron表达式的语法Cron表达式由6个或7个字段组成,每个字段代表时间的一个维度。
这6个或7个字段分别是:•秒(0~59)•分钟(0~59)•小时(0~23)•日(1~31)•月(1~12)•周几(0~7,0和7都代表周日)可以使用通配符或范围来表示时间的不确定性。
例如,“*“代表所有可能的值,”?“在日和周几字段中代表不指定值,”-“用来表示范围,” / “用来表示递增间隔。
例如,要设置每天早上9点执行任务,Cron表达式可以是0 0 9 ? * *。
3. 常用的Cron表达式示例以下是一些常见的Cron表达式示例:•0 0/5 * * * ?表示每隔5分钟执行一次任务。
•0 0 12 * * ?表示每天中午12点执行任务。
•0 0 8 ? * MON-FRI表示周一到周五每天早上8点执行任务。
•0 0 8 ? * 6L表示每个月的最后一个周五早上8点执行任务。
4. Cron表达式的高级用法Cron表达式还支持一些高级功能,例如使用”#“指定月份中的第几个周几,使用”L”指定月份中的最后一天,使用”W”指定平日最近的工作日等等。
以下是一些高级用法的示例:•0 0 12 ? JAN,FEB,DEC *表示一月、二月和十二月每天中午12点执行任务。
•0 0/30 9-17 * * MON-FRI#2表示周一到周五上午9点到下午5点之间,每隔30分钟执行一次任务,并且每个月的第二个周一符合条件。
5. 总结Cron表达式是Quartz框架中用于指定任务执行时间的标准格式。
它非常灵活,并且支持多种时间维度的设置。
掌握Cron表达式的语法和常用示例,可以帮助我们轻松实现定时任务的调度。
6. Cron表达式的注意事项在使用Cron表达式时,需要注意以下几点:•时间表达式字段之间使用空格分隔。
Quartz及Cron表达式

Quartz及Cron表达式QuartzQuartz是一个完全由java编写的开源作业调度框架.Quartz最主要的功能就是调度器(完成定时任务),可以与javaEE 或者javaSE应用程序相结合也可以单独使用。
Quartz能借助关系数据库和JDBC作业存储支持集群,负载均衡。
Spring QuartzSpring中继承并简化了Quartz, 我们可以通过配置Spring简化Quartz的配置。
在ApplicationContext.xml配置数据源,并且引入ApplicationContext-quartz.xml文件。
ApplicationContext.xml:Xml代码1.<bean id="dataSource" class="org.springframework.jndi. JndiObjectFactoryBean">2.<property name="jndiName" value="java:comp/env/jdbc /publicdb"></property>3.</bean>4..5..6..7..8.<!-- import -->9.<import resource="ApplicationContext-quartz.xml" />[xml] view plain copy1.<bean id="dataSource" class="org.springframework.jndi. JndiObjectFactoryBean">2.<property name="jndiName" value="java:comp/env/jdbc/publicdb"></property>3.</bean>4..5..6..7..8.<!-- import -->9.<import resource="ApplicationContext-quartz.xml" />ApplicationContext-quartz.xml:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/dtd/spring-beans.dtd"> 3.4.<beans default-autowire="byName">5.<!-- 要调用的工作类 -->6.<bean id="reportCreateJob" class="org.quartz.JobDetail" >7.<property name="jobClass">8.<value>com.hundsun.u3c.reportserver.quartz.job.Report CreateJob</value>9.</property>10.<property name="name" value="reportCreate-processor-job" />11.</bean>12.<!-- 定义触发时间 -->13.<bean id="reportCreateTrigger" class="org.springfra mework.scheduling.quartz.CronTriggerBean">14.<property name="jobDetail">15.<ref bean="reportCreateJob" />16.</property>17.<property name="cronExpression">18.<value>0 * * * * ?</value>19.</property>20.</bean>21.<!-- 管理类:配置Schedule信息,与spring容器的生命周期建立联系等功能 -->22.<bean id="scheduler"23.class="org.springframework.scheduling.quartz.Schedu lerFactoryBean">24.<property name="dataSource" ref="dataSource" />25.<!-- 在SchedulerFactoryBean初始化完成后,延迟300秒启动Scheduler,以便让Spring能够更快初始化容器中剩余的Bean。
Cronb表达式

Cronb表达式Popeye有两种任务执行时间策略的表示方式,其中一种是采用Cron表达式来表示任务执行策略。
对表达式的解析和根据表达式对任务调度的功能实现,Popeye直接采纳了quartz。
下面是quartz有关其支持的cron表达式的格式说明一个cron表达式实则是一个由6到7个(时间分量)域组成的字符串,时间域之间必须用空格分开,其中的前六个域是必需的,最后一个则是可选择的,如下:域名取值允许使用的特殊字符秒0-59 , - * /分钟0-59 , - * /小时0-23 , - * /日期1-31 , - * ? / L W C月份1-12或JAN-DEC , - * ? / L C #星期1-7或SUN-SAT(星期天为1) , - * ? / L C #年(可选) 不设置或者1970-2099 , - * /其中●特殊字符星号’*’表示匹配任何值。
比如分钟域设为*表示每一分钟。
●问号’?’可被用于日期域和星期域中,在只需设置这两个域中的其中一个时,可用它表示不设定特定的值,见后面的例子。
●横杠’-’表示一个时间范围。
比如小时域设为”10-12”表示10、11、12时。
●逗号’,’用于设置多个值。
比如"MON,WED,FRI"表示星期一、三、五。
●斜杠’/’表示分割初始值和增量。
比如秒域设成"0/15"表示第0、15、30、45秒。
"5/15"表示第5、20、35、50秒。
在/前设*等同于设初始值为0。
本质上,每个域都有各自的取值范围,/字符仅仅是从取值范围中每隔n个取一个值用于匹配,因此如果月份域设置"7/6",仅会选中7月,而不是表示7月、13月…请注意这点。
●字符’L’可被用于日期域和星期域中,表示“last”的缩写。
在日期域,’L’表示某个月的最有一天,如1月的31号,平年2月的28号等。
而在星期域中,如果单独使用,则仅仅表示星期六(7);如果跟在一个值之后,则表示当月的最后一个该星期数,如’6L’表示当月的最后一个星期五。
quartz表达式

quartz表达式Quartz表达式是Quartz作业调度库中一个功能强大的子模块,它能够按照用户所设定的时间表运行Java应用程序。
本文将介绍Quartz表达式的语法,解释如何使用它来设计复杂的定时任务,以及如何实现一个简单的Quartz调度程序。
Quartz表达式的语法是用来描述一个定时调度任务的时间表。
它支持一个或多个任务执行的时间表定义,如何组织任务,以及任务执行的时间段。
它的语法模式如下:<second>(s|S) <minute>(m|M) <hour>(h|H)<day-of-the-month>(d|D) <month>(M|m) <day-of-the-week>(E|e) <year>(Y|y)?其中,每个括号中的字符代表一个概念,即要按照Quartz表达式运行任务,你必须指定每秒、每分钟和每小时执行任务,以及每月和每年的哪一天运行任务。
比如,如果你想每天的8点和18点运行任务,可以使用Quartz 表达式“0 0 8,18 * *”来描述任务时间表,即“每秒的0秒,每分钟的0分,每小时的8和18点,每月的任意一天,任意一个星期几”。
另外,Quartz表达式还允许你设置更复杂的定时任务。
比如,你可以设置定期重复运行任务,如每隔5分钟执行一次,可以使用Quartz表达式“*/5 * * * *”来描述这种任务时间表,即“所有秒,每分钟的每5分钟,每小时的任意时刻,每月的任意一天,任意一个星期几”。
此外,你还可以在Quartz表达式中指定一个更具体的时间段,比如每月的15号到20号,每个星期的周一到周五,每小时的10分到11分,等等。
下面介绍如何使用Quartz表达式实现一个简单的Quartz作业调度程序。
首先,定义一个Quartz表达式,比如上文中提到的“ */5 * * * *”,它每隔5分钟执行一次任务。
quartz cron 表达式判断条件

quartz cron 表达式判断条件(最新版)目录1.介绍 Quartz cron 表达式2.解释 Quartz cron 表达式的构成部分3.说明如何使用 Quartz cron 表达式进行条件判断4.总结 Quartz cron 表达式的优点和局限性正文Quartz cron 表达式是一种用于定义时间表达式的字符串,常用于Quartz 定时任务的调度。
Quartz 是一个开源的 Java 库,可以方便地实现定时任务的调度和管理。
通过使用 Quartz cron 表达式,用户可以灵活地设置任务的执行时间,从而满足各种业务需求。
Quartz cron 表达式的构成部分包括:秒、分钟、小时、天、月、周和日。
这些部分用空格分隔,每个部分可以包含一个或多个数字,表示对应的时间间隔。
此外,还可以使用一些特殊字符来表示逻辑运算和时间范围。
例如,“0/5 * * * *”表示每 5 秒执行一次任务,“0 0/15 * * * *”表示每 15 分钟执行一次任务。
要使用 Quartz cron 表达式进行条件判断,首先需要了解 Quartz cron 表达式的规则。
例如,可以使用“1/5 * * * *”来表示每 5 分钟执行一次任务,但无法使用“0/5 * * * *”来表示每 5 秒执行一次任务,因为 Quartz cron 表达式不支持小于 1 分钟的时间间隔。
此外,还需要注意一些特殊字符的用法,例如“*”表示任意时间,“?”表示前一个字符的范围,如“第二小时”表示 1-2 点,“/”表示时间范围,如“0/15”表示 0 到 15 分钟。
Quartz cron 表达式的优点在于它简单易用,且具有强大的表达能力。
通过 Quartz cron 表达式,用户可以轻松地设置定时任务的执行时间,从而实现复杂的业务场景。
然而,Quartz cron 表达式也存在一些局限性,例如不支持小于 1 分钟的时间间隔,以及在一些特殊场景下可能难以理解。
quartz定时任务cron表达式详解

quartz定时任务cron表达式详解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点执⾏。
个别⼦表达式可以包含范围或者列表。
例如:上⾯例⼦中的WED可以换成"MON-FRI","MON,WED,FRI",甚⾄"MON-WED,SAT"。
⼦表达式范围:1.Seconds (0~59)2.Minutes (0~59)3.Hours (0~23)4.Day-of-Month (1~31,但是要注意有些⽉份没有31天)5.Month (0~11,或者"JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV,DEC")6.Day-of-Week (1~7,1=SUN 或者"SUN, MON, TUE, WED, THU, FRI, SAT”)7.Year (1970~2099)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 , - * /字符含义:* :代表所有可能的值。
因此,“*”在Month中表⽰每个⽉,在Day-of-Month中表⽰每天,在Hours表⽰每⼩时- :表⽰指定范围。
quartz cron 表达式判断条件

quartz cron 表达式判断条件摘要:1.介绍quartz cron 表达式2.quartz cron 表达式的构成3.判断条件4.具体示例正文:## 1.介绍quartz cron 表达式Quartz 是一个流行的开源任务调度框架,它允许用户通过cron 表达式来定义任务的执行时间。
cron 表达式是一种基于Unix 的定时任务表达式,它可以用来配置任务的执行间隔和执行时间。
## 2.quartz cron 表达式的构成一个典型的quartz cron 表达式由以下几个部分组成:- 分钟(0-59)- 小时(0-23)- 天数(1-31)- 月份(1-12)- 星期几(0-7,0 表示星期日,1 表示星期一,以此类推)这些部分之间用空格隔开,构成了一个完整的cron 表达式。
例如,"0/15 * * * *"表示每15 分钟执行一次。
## 3.判断条件在quartz 中,可以通过cron 表达式来判断任务的执行条件。
具体来说,quartz 会比较当前时间和任务的cron 表达式,如果当前时间符合cron 表达式,那么任务就会被执行。
## 4.具体示例假设我们有一个任务,它的执行条件是每小时执行一次,我们可以通过以下cron 表达式来定义这个任务:```0 */1 * * *```这个表达式的意思是,每小时的第0 分钟执行任务。
例如,如果当前时间是10:00,那么这个任务就会在10:00 执行。
如果当前时间是10:30,那么这个任务就不会执行,因为已经过了每小时的第0 分钟。
这就是如何使用quartz cron 表达式来判断任务的执行条件。
cron表达式写法和配置方法

cron表达式写法和配置方法cron表达式是一个字符串,用来定义执行任务的时间规则。
它由6或7个空格分隔的时间字段组成,每个时间字段又由数字或通配符组成。
具体的语法规则如下:字段名允许的值允许的特殊字符:-: :: ::秒0-59 , - * /分0-59 , - * /小时0-23 , - * /日1-31 , - * ? / L W C月1-12 或JAN-DEC , - * /周几0-6 或SUN-SAT , - * ? / L C #其中,特殊字符的含义如下:- `*`:匹配任意值- `,`:枚举多个值,如`1,3,5`- `-`:表示范围,如`5-10`- `/`:表示递增间隔,如`*/10`- `?`:仅用于日和周几字段,表示不指定值- `L`:仅用于日和周几字段,表示最后一天或最后一个工作日- `W`:仅用于日字段,表示最近的工作日- `C`:仅用于日和周几字段,表示计划所在的最近一天- `#`:仅用于周几字段,表示第几个周几,如`2#3`表示第3周的周二例如,如下配置表示每天23点执行一次任务:0 0 23 * * ?配置方法则因不同的应用而异。
以下是几种常见的应用中的配置方法:- Linux系统中使用crontab。
运行`crontab -e`打开一个文本编辑器,按照cron 表达式语法来编辑任务,保存并退出即可。
- Java应用中使用Quartz框架。
使用`CronTrigger`类来创建任务触发器,并设置cron表达式。
- Spring框架中使用`@Scheduled`注解。
在需要执行定时任务的方法上加上该注解,并设置cron表达式即可。
- Docker Swarm中使用`docker service create`命令。
在命令中加入`update-delay`和`update-parallelism`参数,分别设置任务间隔时间和任务并行数,将时间间隔设置为cron表达式的周期即可。
quartz cronexpression 例子

标题:深度解析quartz cronexpression的例子一、介绍在软件开发中,时间调度是一个非常常见和重要的功能。
quartz是一个功能强大的开源调度框架,它提供了丰富的功能来满足各种调度需求。
其中,cronexpression是quartz中用来描述触发时间的一种表达式,它非常灵活和强大,但同时也比较复杂。
本文将围绕quartz cronexpression的例子展开深入探讨。
二、什么是cronexpressioncronexpression是一种时间表达式,它用于描述在特定时间点触发任务的规则。
在quartz中,cronexpression通常被用于定义触发Job 的时间规则。
它由6个字段组成,分别表示秒、分钟、小时、日期、月份和星期几。
每个字段都可以使用特定的符号来描述不同的时间规则,比如数字、星号、斜线等。
通过组合这些符号,就可以构建出非常灵活和精确的调度规则。
三、quartz cronexpression的例子1. 每天凌晨1点触发任务在cronexpression中,表示每天凌晨1点触发任务的表达式为:"0 0 1 * * ?"。
其中,第一个字段表示秒,第二个字段表示分钟,第三个字段表示小时,然后是日期、月份和星期几。
使用这个cronexpression 就可以实现每天凌晨1点触发任务的功能。
2. 每隔5分钟触发任务如果需要每隔5分钟触发一次任务,对应的cronexpression为:"00/5 * * * ?"。
这个表达式中,第二个字段使用了斜线符号表示间隔5分钟,其他字段保持不变。
使用这个cronexpression就可以实现每隔5分钟触发任务的功能。
3. 每周一、三、五的上午10点触发任务要实现每周一、三、五的上午10点触发任务,对应的cronexpression为:"0 0 10 ? * MON,WED,FRI"。
Quartz CronTrigger最完整配置说明

CronTrigger配置格式:格式: [秒] [分] [小时] [日] [月] [周] [年]序号说明是否必填允许填写的值允许的通配符1 秒是 0-59 , - * /2 分是 0-59 , - * /3 小时是 0-23 , - * /4 日是 1-31 , - * ? / L W5 月是 1-12 or JAN-DEC , - * /6 周是 1-7 or SUN-SAT , - * ? / L #7 年否 empty 或1970-2099 , - * /通配符说明:* 表示所有值. 例如:在分的字段上设置"*",表示每一分钟都会触发。
?表示不指定值。
使用的场景为不需要关心当前设置这个字段的值。
例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为0 0 0 10 * ?-表示区间。
例如在小时上设置"10-12",表示10,11,12点都会触发。
,表示指定多个值,例如在周字段上设置"MON,WED,FRI" 表示周一,周三和周五触发/ 用于递增触发。
如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。
在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。
L表示最后的意思。
在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。
如果在"L"前加上数字,则表示该数据的最后一个。
例如在周字段上设置"6L"这样的格式,则表示“本月最后一个星期五"W表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。
QuartZCron表达式

QuartZCron表达式Cron Expressionscron的表达式被⽤来配置CronTrigger实例。
cron的表达式是字符串,实际上是由七⼦表达式,描述个别细节的时间表。
这些⼦表达式是分开的空⽩,代表:1. Seconds2. Minutes3. Hours4. Day-of-Month5. Month6. Day-of-Week7. Year (可选字段)8.例 "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”表⽰ “*”:指定所有的值,⽐如,Minutes 设置为 *,表⽰每分钟“/”:为特别单位,表⽰为“每”如“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" 则表⽰“每⽉第三个星期五”注意: Day-of-Month 和 Day-of-Week不可同时为 * ,否则报错:1 ng.RuntimeException: CronExpression '0/2 * * * * * *' is invalid.23 at org.quartz.CronScheduleBuilder.cronSchedule(CronScheduleBuilder.java:111)4 at quartz.QuartzExample.getTrigger(QuartzExample.java:110)5 at quartz.QuartzExample.run(QuartzExample.java:74)6 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)7 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)8 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)9 at ng.reflect.Method.invoke(Method.java:606)10 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)11 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)12 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)13 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)14 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)15 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)16 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)17 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)18 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)19 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)20 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)21 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)22 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)23 at org.junit.runners.ParentRunner.run(ParentRunner.java:363)24 at org.junit.runner.JUnitCore.run(JUnitCore.java:137)25 at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)26 at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)27 at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)28 at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)29 Caused by: java.text.ParseException: Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.30 at org.quartz.CronExpression.buildExpression(CronExpression.java:511)31 at org.quartz.CronExpression.<init>(CronExpression.java:276)32 at org.quartz.CronScheduleBuilder.cronSchedule(CronScheduleBuilder.java:107)33 ... 25 more3435 Disconnected from the target VM, address: '127.0.0.1:61437', transport: 'socket'3637 Process finished with exit code -1RuntimeExceptionCronExpression 源码:protected void buildExpression(String expression) throws ParseException {expressionParsed = true;try {if (seconds == null) {seconds = new TreeSet<Integer>();}if (minutes == null) {minutes = new TreeSet<Integer>();}if (hours == null) {hours = new TreeSet<Integer>();}if (daysOfMonth == null) {daysOfMonth = new TreeSet<Integer>();}if (months == null) {months = new TreeSet<Integer>();}if (daysOfWeek == null) {daysOfWeek = new TreeSet<Integer>();}if (years == null) {years = new TreeSet<Integer>();}int exprOn = SECOND;StringTokenizer exprsTok = new StringTokenizer(expression, " \t",false);while (exprsTok.hasMoreTokens() && exprOn <= YEAR) {String expr = exprsTok.nextToken().trim();// throw an exception if L is used with other days of the monthif(exprOn == DAY_OF_MONTH && expr.indexOf('L') != -1 && expr.length() > 1 && expr.contains(",")) {throw new ParseException("Support for specifying 'L' and 'LW' with other days of the month is not implemented", -1);}// throw an exception if L is used with other days of the weekif(exprOn == DAY_OF_WEEK && expr.indexOf('L') != -1 && expr.length() > 1 && expr.contains(",")) {throw new ParseException("Support for specifying 'L' with other days of the week is not implemented", -1);}if(exprOn == DAY_OF_WEEK && expr.indexOf('#') != -1 && expr.indexOf('#', expr.indexOf('#') +1) != -1) {throw new ParseException("Support for specifying multiple \"nth\" days is not implemented.", -1);}StringTokenizer vTok = new StringTokenizer(expr, ",");while (vTok.hasMoreTokens()) {String v = vTok.nextToken();storeExpressionVals(0, v, exprOn);}exprOn++;}if (exprOn <= DAY_OF_WEEK) {throw new ParseException("Unexpected end of expression.",expression.length());}if (exprOn <= YEAR) {storeExpressionVals(0, "*", YEAR);}TreeSet<Integer> dow = getSet(DAY_OF_WEEK);TreeSet<Integer> dom = getSet(DAY_OF_MONTH);// Copying the logic from the UnsupportedOperationException belowboolean dayOfMSpec = !dom.contains(NO_SPEC);boolean dayOfWSpec = !dow.contains(NO_SPEC);if (!dayOfMSpec || dayOfWSpec) {if (!dayOfWSpec || dayOfMSpec) {throw new ParseException("Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.", 0); }}} catch (ParseException pe) {throw pe;} catch (Exception e) {throw new ParseException("Illegal cron expression format ("+ e.toString() + ")", 0);}}CronExpression 部分代码1)Cron表达式的格式:秒分时⽇⽉周年(可选)。
Quartz cron 表达式简要说明

Quartz cron表达式简要说明Quartz cron表达式的格式十分类似于UNIX cron格式,但还是有少许明显的区别。
区别之一就是Quartz的格式向下支持到秒级别的计划,而UNIX cron计划仅支持至分钟级。
许多我们的触发计划要基于秒级递增的(例如,每45秒),因此这是一个非常好的差异。
与UNIX cron表达式的不同点是在表达式中支持域的数目。
UNIX给出五个域(分、时、日、月和周),Quartz提供七个域。
如下表所示:Cron域名是否必须允许值特殊字符秒是0-59,-*/分是0-59,-*/时是0-23,-*/日是1-31,-*?/L W C月是1-12或JAN-DEC,-*/周是1-7或SUN-SAT,-*?/L C#年否空或1970-2099,-*/月份和星期的名称是不区分大小写的。
FRI和fri是一样的。
域之间有空格分隔,这和UNIX cron一样。
无可争辩的,我们能写的最简单的表达式看起来就是这个了:***?**这个表达会每秒钟(每分种的、每小时的、每天的)激发一个部署的job。
·理解特殊字符同UNIX cron一样,Quartz cron表达式支持用特殊字符来创建更为复杂的执行计划。
然而,Quartz在特殊字符的支持上比标准UNIX cron表达式更丰富了。
*星号使用星号(*)指示着你想在这个域上包含所有合法的值。
例如,在月份域上使用星号意味着每个月都会触发这个trigger。
表达式样例:0*17**?意义:每天从下午5点到下午5:59中的每分钟激发一次trigger。
它停在下午5:59是因为值17在小时域上,在下午6点时,小时变为18了,也就不再理会这个trigger,直到下一天的下午5点。
在你希望trigger在该域的所有有效值上被激发时使用*字符。
?问号?号只能用在日和周域上,但是不能在这两个域上同时使用。
你可以认为?字符是"我并不关心在该域上是什么值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Quartz中时间参数说明即Cron表达式
Cron表达式
Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成,如表1所示:
表1 Cron表达式时间字段
Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范围、通配符等功能,细说如下:
●星号(*):可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”;
●问号(?):该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符;
●减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12;
●逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五;
●斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。
如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y;
●L:该字符只在日期和星期字段中使用,代表“Last”的意思,但它在两个字段中意思不同。
L在日期字段中,表示这个月份的最后一天,如一月的31号,非闰年二月的28号;如果L 用在星期中,则表示星期六,等同于7。
但是,如果L出现在星期字段里,而且在前面有一个数值X,则表示“这个月的最后X天”,例如,6L表示该月的最后星期五;
●W:该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。
例如15W表示离该月15号最近的工作日,如果该月15号是星期六,则匹配14号星期五;如果15日是星期日,则匹配16号星期一;如果15号是星期二,那结果就是15号星期二。
但必须注意关联的匹配日期不能够跨月,如你指定1W,如果1号是星期六,结果匹配的是3号星期一,而非上个月最后的那天。
W字符串只能指定单一日期,而不能指定日期范围;
●LW组合:在日期字段可以组合使用LW,它的意思是当月的最后一个工作日;
●井号(#):该字符只能在星期字段中使用,表示当月某个工作日。
如6#3表示当月的第三个星期五(6表示星期五,#3表示当前的第三个),而4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发;
● C:该字符只在日期和星期字段中使用,代表“Calendar”的意思。
它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。
例如5C在日期字段中就相当于日历5日以后的第一天。
1C在星期字段中相当于星期日后的第一天。
Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感。
表2下面给出一些完整的Cron表示式的实例:
表2 Cron表示式示例
表示式
说明
注意:CronTriggerBean的cronExpression属性指定格式:至少6个时间元素,上面表示每天的15:37-38分执行1次任务。
时间元素(按照顺序):
秒(0-59):
分(0-59):
小时(0-23):
每月第几天(1-31):
月(1-12或JAN-DEC):
每星期第几天(1-7或SUN-SAT):
年(1970-2099):
其中:不用设置的用”?”.
(1)每月第几天和每星期第几天是互斥的,两个只能设置1个。
如果有好几个时间点,可以使用”,”符号,例如:”0 0 10,12,14 * * ?”表示每天的10时,12时,14时执行Job.
(2)对于连续时间可以使用”-”符号。
例如:”0 10,12,14 1-15 * ?”表示每月的1到15日10时,12时,14时执行Job.
(3)时间格式的年可以不用制定。
例如”0 0 10,12,14 ? MON 2006”表示2006年每星期一的10时,12时,14时执行Job.。