Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.2.1。

一、Spring创建JobDetail的两种方式 定时任务两种方式,Spring很好的封装使用Quartz的细节,第一种方式是利用SPring封装的Quartz类进行特定方法的实现,第二种是通过透明的使用Quartz达到定时任务开发的目的,总体说第二种对开发人员更方便! 配置Spring的任务调度抽象层简化了任务调度,在Quartz的基础上提供了更好的调度对象。Spring使用Quartz框架来完成任务调度,创建Quartz的作业Bean(JobDetail),有一下两种方法:

1:利用JobDetailBean包装QuartzJobBean子类(即Job类)的实例。

2:利用MethodInvokingJobDetailFactoryBean工厂Bean包装普通的Java对象(即Job类)。

说明:

1:采用第一种方法 创建job类,一定要继承QuartzJobBean ,实现 executeInternal(JobExecutionContext jobexecutioncontext)方法,此方法就是被调度任务的执行体,然后将此Job类的实例直接配置到JobDetailBean中即可。这种方法和在普通的Quartz编程中是一样的。

2:采用第二种方法 创建Job类,无须继承父类,直接配置ethodInvokingJobDetailFactoryBean 即可。但需要指定一下两个属性: targetObject:指定包含任务执行体的Bean实例。 targetMethod:指定将指定Bean实例的该方法包装成任务的执行体。

这里主要展示第二种方法;

1.配置需要的jar包pom.xml配置如下

  <properties><spring.version>3.2.8.RELEASE</spring.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>1.8.5</version></dependency><!--  spring framework    --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency></dependencies>

2.配置spring文件

applicationcontext.xml 内容如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsd"><!-- Timer schedule --><!--要调度的对象--><bean id="jobBean" class="QuartzJob" /><bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="jobBean" /><property name="targetMethod" value="execute" /><!--将并发设置为false--><property name="concurrent" value="false" /></bean><bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="jobDetail" /><!--表达式,我的是每 30 执行一次--><property name="cronExpression" value="0/30 * * * * ?" /></bean><!--  总管理类如果将lazy-init='false'那么容器启动就会执行调度程序   --><bean id="startQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" ><property name="triggers"><list><!--作业调度器,list下可加入其他的调度器--><ref bean="trigger" /></list></property></bean>
</beans>

3.新建自己的Job类

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.text.SimpleDateFormat;
import java.util.Date;/*** Created by pengli on 5/5/2015.*/
public class QuartzJob {public void execute(){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date now = new Date();String ly_time = sdf.format(now);System.out.println(ly_time+"\n");
}public static void main(String[] args){System.out.println("Job start");ApplicationContext content = new ClassPathXmlApplicationContext("applicationcontext.xml");content.getBean("startQuartz");System.out.println("Job end");}}

结果

1 、JobDetail : JobDetail 是一个具体的类。 
2、Trigger :触发器,它用于定义 Job 何时执行。最常用的是 SimpleTrigger 和 CronTrigger 。一般来说,如果你需要在一个固定的时间和重复次数或者一个固定的间隔时间,那么 SimpleTrigger 比较合适;如果你有许多复杂的作业调度,那么 CronTrigger 比较合适。 CronTrigger 和 Unix 的 cron 机制基本一样,我们需要的只是一个 cron 表达式。比如“ 0 0 12 * * ? ”会在每天中午 12 点触发 执行;“ 0 15 10 ? * 6L ”会在每个月的最后一个星期五的早上 10:15 触发 Job 执行。
3、 Scheduler 和 SchedulerFactory : Scheduler 负责管理 Trigger 、调度 Job , SchedulerFactory 则是 Scheduler 工厂,负责生成 Scheduler 。

一下内容转载自:http://yangpanwww.iteye.com/blog/797563

字段名 允许的值 允许的特殊字符 
秒 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 , - * /

‘’ 字符可以用于所有字段,在“分”字段中设为”“表示”每一分钟”的含义。 
‘?’ 字符可以用在“日”和“周几”字段. 它用来指定 ‘不明确的值’. 这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。在后面的例子中可以看到其含义。 
‘-’ 字符被用来指定一个值的范围,比如在“小时”字段中设为”10-12”表示”10点到12点”. 
‘,’ 字符指定数个值。比如在“周几”字段中设为”MON,WED,FRI”表示”the days Monday, Wednesday, and Friday”. 
‘/’ 字符用来指定一个值的的增加幅度. 比如在“秒”字段中设置为”0/15”表示”第0, 15, 30, 和 45秒”。而 “5/15”则表示”第5, 20, 35, 和 50”. 在’/’前加”*”字符相当于指定从0秒开始. 每个字段都有一系列可以开始或结束的数值。对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23, 对于“日”字段来说为0到31, 而对于“月”字段来说为1到12。”/”字段仅仅只是帮助你在允许的数值范围内从开始”第n”的值。 因此对于“月”字段来说”7/6”只是表示7月被开启而不是“每六个月”, 请注意其中微妙的差别。 
‘L’字符可用在“日”和“周几”这两个字段。它是”last”的缩写, 但是在这两个字段中有不同的含义。例如,“日”字段中的”L”表示”一个月中的最后一天” —— 对于一月就是31号对于二月来说就是28号(非闰年)。而在“周几”字段中, 它简单的表示”7” or “SAT”,但是如果在“周几”字段中使用时跟在某个数字之后, 它表示”该月最后一个星期×” —— 比如”6L”表示”该月最后一个周五”。当使用’L’选项时,指定确定的列表或者范围非常重要,否则你会被结果搞糊涂的。 
‘W’ 可用于“日”字段。用来指定历给定日期最近的工作日(周一到周五) 。比如你将“日”字段设为”15W”,意为: “离该月15号最近的工作日”。因此如果15号为周六,触发器会在14号即周五调用。如果15号为周日, 触发器会在16号也就是周一触发。如果15号为周二,那么当天就会触发。然而如果你将“日”字段设为”1W”, 而一号又是周六, 触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。’W’字符只能用于“日”字段的值为单独的一天而不是一系列值的时候。 
‘L’和’W’可以组合用于“日”字段表示为’LW’,意为”该月最后一个工作日”。 
‘#’ 字符可用于“周几”字段。该字符表示“该月第几个周×”,比如”6#3”表示该月第三个周五( 6表示周五而”#3”该月第三个)。再比如: “2#1” = 表示该月第一个周一而 “4#5” = 该月第五个周三。注意如果你指定”#5”该月没有第五个“周×”,该月是不会触发的。 
‘C’ 字符可用于“日”和“周几”字段,它是”calendar”的缩写。它表示为基于相关的日历所计算出的值(如果有的话)。如果没有关联的日历, 那它等同于包含全部日历。“日”字段值为”5C”表示”日历中的第一天或者5号以后”,“周几”字段值为”1C”则表示”日历中的第一天或者周日以后”。 
对于“月份”字段和“周几”字段来说合法的字符都不是大小写敏感的。 
下面是一些完整的例子: 
表达式 含义 
“0 0 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分每分钟一次触发 
“0 0/5 14 * * ?” 每天从下午2点开始到2:55分结束每5分钟一次触发 
“0 0/5 14,18 * * ?” 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发 
“0 0-5 14 * * ?” 每天14:00至14:05每分钟一次触发 
“0 10,44 14 ? 3 WED” 三月的每周三的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” 每月最后一个周五的10:15触发 
“0 15 10 ? * 6L 2002-2005” 2002年至2005年的每月最后一个周五的10:15触发 
“0 15 10 ? * 6#3” 每月的第三个周五的10:15触发

“30 * * * * ?” 每半分钟触发任务 
“30 10 * * * ?” 每小时的10分30秒触发任务 
“30 10 1 * * ?” 每天1点10分30秒触发任务 
“30 10 1 20 * ?” 每月20号1点10分30秒触发任务 
“30 10 1 20 10 ? *” 每年10月20号1点10分30秒触发任务 
“30 10 1 20 10 ? 2011” 2011年10月20号1点10分30秒触发任务 
“30 10 1 ? 10 * 2011” 2011年10月每天1点10分30秒触发任务 
“30 10 1 ? 10 SUN 2011” 2011年10月每周日1点10分30秒触发任务 
“15,30,45 * * * * ?” 每15秒,30秒,45秒时触发任务 
“15-45 * * * * ?” 15到45秒内,每秒都触发任务 
“15/5 * * * * ?” 每分钟的每15秒开始触发,每隔5秒触发一次 
“15-30/5 * * * * ?” 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次 
“0 0/3 * * * ?” 每小时的第0分0秒开始,每三分钟触发一次 
“0 15 10 ? * MON-FRI” 星期一到星期五的10点15分0秒触发任务 
“0 15 10 L * ?” 每个月最后一天的10点15分0秒触发任务 
“0 15 10 LW * ?” 每个月最后一个工作日的10点15分0秒触发任务 
“0 15 10 ? * 5L” 每个月最后一个星期四的10点15分0秒触发任务 
“0 15 10 ? * 5#3” 每个月第三周的星期四的10点15分0秒触发任务

spring Quartz简单整合测试相关推荐

  1. RabbitMQ(四):RabbitMQ与Spring Boot简单整合 快速尝鲜版

    RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.Spring Boot的兴起,极大地简化了Spring的开发,本文将使用Spring Boot与RabbitM ...

  2. spring与junit整合测试

    1.导包4+2+aop+test 这里不愿意截图了,上面讲注解配置时候有截图 2.配置注解 //帮我们创建容器 @RunWith(SpringJUnit4ClassRunner.class) //指定 ...

  3. 基础概念总结(spring security、Quartz、JUnit测试)

    1.Spring Security 的大体框架和原理 (1)在web.xml中配置过滤器,这样就可以控制这个项目的每个请求.  (2)在applicationContext.xml配置,其中http标 ...

  4. Spring和WebSocket整合并建立简单的Web聊天室

    Spring和WebSocket整合并建立简单的Web聊天室 官方主页 Spring WebSocket 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. Web ...

  5. 动态配置定时任务(Spring Boot + quartz 的整合)

    在整个项目规划中,有的时候需要定时的去执行某一段代码,触发时间能随时修改,并且不影响项目的整体运行.所以,定时器的设计就必须要灵活,能随时的增,删,改定时任务. 数据库设计 CREATE TABLE ...

  6. Spring与Quartz的整合实现定时任务调度

    Spring与Quartz的整合实现定时任务调度 摘自: http://kevin19900306.iteye.com/blog/1397744 最近在研究Spring中的定时任务功能,最好的办法当然 ...

  7. Quartz专题(二)-Spring和Quart整合

    Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于Java实现.下面讲解Spring和Quart整合流程: 1.导入依赖 <dependencies> ...

  8. spring boot 整合 spring cache 简单使用

    spring boot 整合 spring cache 简单使用 spring cache简介 使用spring cache spring cache简介 Spring 3.1起,提供了基于注解的对C ...

  9. Spring Boot2.x 整合quartz集群

    springboot2.x支持对quartz的自动配置,引入jar <!-- spring boot2.x + quartz --><dependency><groupI ...

最新文章

  1. bootstrap五星评分_星型打分插件 bootstrap-rating-input
  2. 从 idea打包工程到dos下命令运行
  3. linux查询关键词上下行_【已解决】Linux下通过关键字模糊查找搜索文件
  4. 项目管理13禁忌[转]
  5. 编写你的第一个 Django 应用,第 5 部分
  6. 【微软官方文档】Windows终端(Windows Terminal)
  7. eclipse 国内镜像高速下载
  8. 开源备份web_13个开源备份解决方案
  9. Java学习作业(14.4.21)
  10. idea开发springboot的一些小干货
  11. modelandview 跳转问题_ModelAndView 跳转的使用
  12. 前后端分离的时代,团队间的完美协作
  13. [caffe] Long-term Recurrent Convolutional Networks
  14. @hapi/joi 报错 “message“: “Cannot mix different versions of joi schemas“
  15. 一个入行很长的老鸟给新手的一些建议——转
  16. Fumark支持SLI双卡测试设置
  17. 最全MacWin软件分享
  18. 深入讲解Android!最全的BAT大厂面试题整理,威力加强版
  19. C进阶(2)指针的进阶(1)
  20. 计算机网络之概述、发展简史、层次结构设计、网络拓扑、性能指标

热门文章

  1. 表达量差异分析结果的可视化
  2. Python+Excel数据分析实战:军事体能考核成绩评定(二)基本框架和年龄计算
  3. 长沙理工大学课表app(自己动手,丰衣足食)
  4. 优化详情页怎么做|百誉纳成
  5. 判断点与圆的位置关系(点在圆内,点在圆外)
  6. 自学Web开发第十二天-基于VB和ASP.NET;页面嵌套、母版、网站导航
  7. “美版贴吧” 强制对 API 收费遭开发者反击:关闭第三方 App 开源代码、数千个子论坛改私有模式、直接搞崩官网!...
  8. 组合算法/全排列算法/求子集算法
  9. 为数不多的真正解决VMware与 Device/Credential Guard 不兼容,关闭了hyper-v还是不行
  10. 基于工业路由器的工业机器人远程监控系统方案应用