Quarzt定时调度任务
简介
Quarzt是一个项目中定时执行任务的开源项目,Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用,这里我们介绍和spring
整合的例子
因为Spring已经整合Quarzt,所以我们只需要配置一下即可。
下载jar包
可以直接去http://www.quartz-scheduler.org/ Quarzt的官方网站下载jar包
可以通过Maven来构建,记得引入Spring所需要的jar
<!-- 引入quartz对应的依赖 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.3</version>
</dependency>
概念
任务类:即需要定时执行代码的类。
JobDetail:配置任务类的细节,即注入任务类和指定任务类的方法,是一个可执行的工作,它本身可能是有状态的。
触发器(myTrigger):触发器代表一个调度参数的配置,配置调用的时间。
调度工厂(scheduler):是一个计划调度器容器,容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。
配置方法
- 首先编写任务类
public class MyJob {
public void job() {
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ": 任务执行");
}
}
- 然后再spring配置任务类的bean
<bean id="myJob" class="quarzt.test.MyJob" / >
- 配置JobDetail,注入任务类和任务类的方法
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 注入目标对象 -->
<property name="targetObject" ref="myJob"/>
<!-- 注入目标方法 -->
<property name="targetMethod" value="job"/>
</bean>
- 配置触发器
<!-- 配置触发器 -->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 注入任务详情对象 -->
<property name="jobDetail" ref="jobDetail"/>
<!-- 注入cron表达式,通过这个表达式指定触发的时间点 -->
<property name="cronExpression">
<value>/5 * * * * ?</value> // 表示每隔五秒执行一次。 corn在下面会有活命
</property>
</bean>
- 最后配置调度工厂并且注入配置好的触发器
<!-- 配置调度工厂 -->
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 注入触发器 -->
<property name="triggers">
<list>
<ref bean="myTrigger"/>
</list>
</property>
</bean>
到此就配置完成,可以执行定时任务了。
执行结果
cron表达式
corn用来控制任务的调度时间,在Trigger中配置,下面是corn表达式的基本语法,如果看着太复杂,网上提供了corn语法生成器 http://cron.qqe2.com/ 可以通过指定条件自动生成corn表达式。
下面是七个*所代表的意义
星号:* 代表任意时间,即指示着你想在这个域上包含所有合法的值,
* * * * * *
代表每时每刻都会触发0 * 17 * * ?
: 每天从下午5点到下午5:59中的每分钟激发一次 trigger。它停在下午 5:59 是因为值 17 在小时域上,在下午 6 点时,小时变为 18 了,也就不再理会这个 trigger,直到下一天的下午5点。
问号(?):? 号只能用在日和周域上,但是不能在这两个域上同时使用。你可以认为 ? 字符是 "我并不关心在该域上是什么值。" 这不同于星号,星号是指示着该域上的每一个值。? 是说不为该域指定值,假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?。
0 10,44 14 ? 3 WEB
:在三月中的每个星期三的下午 2:10 和 下午 2:44 被触发。
逗号(,) : 是用来在给某个域上指定一个值列表的。例如,使用值 0,15,30,45 在秒域上意味着每15秒触发一个 trigger。
0 0,15,30,45 * * * ?
:每刻钟触发一次 trigger。
反斜线(/): (/) 是用于时间表的递增的。我们刚刚用了逗号来表示每15分钟的递增,但是我们也能写成这样 0/15。
0/15 0/30 * * * ?
:在整点和半点时每15秒触发 trigger。
中划线(-):中划线 (-) 用于指定一个范围。例如,在小时域上的 3-8 意味着 "3,4,5,6,7 和 8 点。" 域的值不允许回卷,所以像 50-10 这样的值是不允许的。
0 45 3-8 ? * *
::在上午的3点至上午的8点的45分时触发。
字母(L):L 说明了某域上允许的最后一个值。它仅被日和周域支持。当用在日域上,表示的是在月域上指定的月份的最后一天,当 L 字母用于周域上,指示着周的最后一天,就是星期六 (或者数字7),你可以用一个数字与 L 连起来表示月份的最后一个星期 X。
0 0 8 L * ?
:每个月最后一天的上午 8:00 触发0 59 23 ? * L
:每个月的最后一个星期六下午的 11:59 触发0 0 12 ? * 2L
:每个月的最后一个星期一触发(数字与 L 连起来表示月份的最后一个星期 X)
字母(W):平日 (Mon-Fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日
井号(#):# 字符仅能用于周域中。它用于指定月份中的第几周的哪一天。例如,如果你指定周域的值为 6#3,它意思是某月的第三个周五 (6=星期五,#3意味着月份中的第三周)。
示例
"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 ? 3WED" 每年三月的星期三的下午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 ? * 6L2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? *6#3" 每月的第三个星期五上午10:15触发
Quarzt定时调度任务的更多相关文章
- Quartz定时调度框架
Quartz定时调度框架CronTrigger时间配置格式说明 CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年 ...
- Spring Quartz定时调度任务配置
applicationContext-quartz.xml定时调度任务启动代码: <?xml version="1.0" encoding="UTF-8" ...
- 定时调度框架Quartz随笔
最近项目中的定时批处理用到了quartz定时任务,在此记录下quartz的配置吧,一个小demo仅供参考,也方便自己今后复习! 下面直接来步骤吧! 一.首先,要搭起能让quartz正常运行的环境,至少 ...
- crontab 定时调度
crontab -e */1 8-23 * * * /www/target/sh/myorder.sh & 0 1 * * * /www/target/php/sh/mymoney.sh &a ...
- java 多线程——quartz 定时调度的例子
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- java 多线程——一个定时调度的例子
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- linux定时调度器每秒运行一次
linux操作系统最小粒度的定时调度器仅仅能调到分钟的级别,工作中有时需在到秒的调度,所以须要自己编写脚本来实现 #!/bin/bash while [ true ]; do /bin/sleep 1 ...
- Spring中实现定时调度
1, 内容简介 所谓的定时调度,是指在无人值守的时候系统可以在某一时刻执行某些特定的功能采用的一种机制,对于传统的开发而言,定时调度的操作分为两种形式: 定时触发:到某一时间点上执行某些处理操作: ...
- springmvc+quartz简单实现定时调度
一.简介:Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十 ...
随机推荐
- net 记录controller Action耗时
可能有些时候需要记录Action的执行时间来优化系统功能,这时可以用过滤器来实现 第1个例子 using System; using System.Diagnostics; using System. ...
- 在 Azure WebApps 中运行64位 Asp.net Core 应用
作为微软下一代的开源的跨平台的开发框架, Asp.net core 正在吸引越来越多的开发者基于其构建现代 web 应用. 目前, Azure App Service 也实现了对 asp.net co ...
- Python基础学习总结(二)
2.列表简介 Python有内置的一种数据类型列表:list. list是一种有序的集合. 列表由一系列按特定顺序排列的元素组合.用方括号 [ ] 来表示. list里面的元素的数据类型可以不同,比如 ...
- mysql根据时间查询日期的优化
例如查询昨日新注册用户,写法有如下两种: EXPLAIN select * from chess_user u where DATE_FORMAT(u.register_time,'%Y-%m-%d' ...
- thrift简介
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl ...
- php+mysql+jquery日历签到
在网站开发过程中我们会经常用到签到功能来奖励用户积分,或者做一些其他活动.这次项目开发过程中做了日历签到,因为没有经验所有走了很多弯路,再次记录过程和步骤. 1.日历签到样式: 2.本次签到只记录本月 ...
- 新手必需用!大道至简的前端编辑器Sublime Text
很多人在进入学习前端的时候(包括我自己),除了选择学习合适的技术,还需要一个得(自)心(己)应(喜)手(欢)的开发工具,一个得心应手的开发工具除了可以令你的效率大大提高,也可以令你在写代码的时候,心情 ...
- Oracle中的索引详解(转载)
一. ROWID的概念 存储了row在数据文件中的具体位置:64位 编码的数据,A-Z, a-z, 0-9, +, 和 /, row在数据块中的存储方式 SELECT ROWID, last_name ...
- ArcGIS for JavaScript 关于路径开发的一些记录(三)
最近被一个bug困扰了两天~ 我新发布了一个NAserver(路径分析服务),但是放在之前的代码里面发现不能生成路径.经过我的调试发现并没有代码并没有报错,并且能够返回所生成路径的Graphic la ...
- 4 关于word2vec的skip-gram模型使用负例采样nce_loss损失函数的源码剖析
tf.nn.nce_loss是word2vec的skip-gram模型的负例采样方式的函数,下面分析其源代码. 1 上下文代码 loss = tf.reduce_mean( tf.nn.nce_los ...