文档章节

Quartz定时器

目翟
 目翟
发布于 2014/01/15 13:49
字数 1903
阅读 198
收藏 6
点赞 0
评论 0

一,Quartz定时器执行流程

Quartz需要定义执行任务、触发器,在任务中指定执行的类对象及对象的方法,触发器中定义执行的时间、执行的任务。如果需要配置多个任务,可以定义多个任务和多个触发器。

二,在WEB环境中的配置(Spring)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:loxia="http://loxia.benjamin.cn/schema/core" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://loxia.benjamin.cn/schema/core http://loxia.benjamin.cn/schema/core/loxia-spring-ext.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

	<bean id="testManager" class="com.jumbo.shop.daemon.manager.TestManagerImpl" />
	
	<util:properties id="p_schedule" location="classpath:config/schedule.properties"></util:properties>

	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>             
                <ref bean="testTaskTrigger1"  />
                <ref bean="testTaskTrigger2"  />
			</list>
		</property>
		<property name="autoStartup" value="true" />
	</bean>
    
    <bean id="testTaskTrigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <bean p:targetObject-ref="testManager" p:targetMethod="testTaskTrigger1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" />
        </property>
        <property name="cronExpression" value="#{p_schedule['testTask1.cronExpression']}" />
    </bean>
    
    <bean id="testTaskTrigger2" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <bean p:targetObject-ref="testManager" p:targetMethod="testTaskTrigger2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" />
        </property>
        <property name="cronExpression" value="#{p_schedule['testTask2.cronExpression']}" />
    </bean>
    
</beans>

testTask1.cronExpression=00 00 23 31 12 ?
testTask2.cronExpression=00 10 23 31 12 ?

三,触发器Cron表达式

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表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感。

其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.

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触发

"0 5 2 1 8 ? *" 每年的8月1号2:5触发

有些子表达式能包含一些范围或列表

例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”

“*”字符代表所有可能的值

因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天

“/”字符用来指定数值的增量

例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟

         在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样

“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值

当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”

“L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写

但是它在两个子表达式里的含义是不同的。

在天(月)子表达式中,“L”表示一个月的最后一天

在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT

如果在“L”前有具体的内容,它就具有其他的含义了

例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五

注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题


© 著作权归作者所有

共有 人打赏支持
目翟
粉丝 4
博文 25
码字总数 26183
作品 0
闸北
高级程序员
quartz定时器实现

总结:要实现定时器quartz,我们注意两步就行了,一是写好实现类注意实现类的方法名要和配置中一致,二是做好配置。然后就可以测试了。 ①定时器实现类 HealthRecodersTokenScheduler.java ...

建波李 ⋅ 2017/11/17 ⋅ 0

OpenJWeb使用Spring框架实现定时作业调度的例子

因Spring集成了QuartzJob,所以实现定时作业调度非常方便,首先实现一个作业调度类,类里面可以任意增加用于定时调用的方法,如定时发邮件,定时构造索引,工作流引擎定时监控等,下面是一个继承了的...

迷途d书童 ⋅ 2012/03/09 ⋅ 0

web端quartz框架集成工具--quartz web

quartz web 是一个轻量级的web端quartz框架集成工具,只需4个步骤,即可轻松使用定时器功能。 在项目中添加JobInitServlet.java 在web.xml中添加启动项servlet 写一个Job类,继承自org.quart...

抗争的诗人 ⋅ 2016/01/05 ⋅ 2

Spring quartz定时器动态多任务实现

项目中经常会碰到需要定时执行的任务,并且需要执行什么任务,以及任务执行的时间都由用户自定义的需求。quartz是比较常用的定时器工具,并且在spring框架中也已经做了很好的集成,所以在以s...

凯文加内特 ⋅ 2015/06/27 ⋅ 0

关于spring 定时器的配置

其实配置spring的定时器很简单,看下面配置: <!--实际的工作Bean--> <bean id="importData" class="com.eshore.transdata.timerjob.ImportData" lazy-init="false"> </bean> <!--jobBean用于......

alico ⋅ 2012/10/23 ⋅ 0

想问下如何给jfinal定时器quartz加上事物

@JFinal 你好,想跟你请教个问题:想问下如何给jfinal的扩展的定时器quartz里面加上事物。我现在是在execute方法上面加了tx.class注解。发现quartz一旦执行到runtime异常就重新开始定时器任务...

jonathan_loda ⋅ 2014/11/11 ⋅ 3

在OpenJWeb平台中使用Spring框架配置定时器的实例

由于OpenJWeb平台集成了Spring框架,所以定时作业的开发非常方便,首先一个被定时器调用的类: package org.openjweb.common.timer; import org.apache.log4j.Logger; import org.quartz.JobExe...

迷途d书童 ⋅ 2012/03/09 ⋅ 0

Spring使用定时器任务时,配置定时器为非并发调用

问题描述:在使用Sping 3的 Quartz定时器定时执行时,发现一个问题:对于某些执行频率非常高的作业(例如5秒执行一次),但是每次任务的执行时间又比较长(可能超过5秒)。如果要求前一次任务...

Tek_Eternal ⋅ 2014/11/03 ⋅ 2

spring+quartz 定时器使用

项目使用:spring+springMVC+JPA+Maven 1、在pom.xml中引用quartz的jar包 <!-- quartz --><dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version......

杀丶破狼 ⋅ 2015/10/13 ⋅ 1

关于Spring Quartz......

可以动态修改执行时间的Spring Quartz定时器,怎么设置tomcat启动时不执行定时器,或者cronExpression怎么设置成任何时间都不执行,动态修改触发时间的时候再执行定时器?怎么样结束定时器?...

ian003 ⋅ 2014/04/23 ⋅ 5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 9分钟前 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 13分钟前 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 15分钟前 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 34分钟前 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 40分钟前 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 41分钟前 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 45分钟前 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 45分钟前 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 51分钟前 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 54分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部