quartz corn参数配置 复杂表达式

合集下载

Quartz学习--quartz基本介绍和Cron表达式

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 表达式详解

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表达式在线生成

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触发器表达式语法

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表达式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表达式

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表达式

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表达式是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分钟执行一次任务。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.。

相关文档
最新文档