`
yangpanwww
  • 浏览: 624979 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Quartz作业调度框架

阅读更多

Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE J2EE 应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。本系统结合通过 Spring 来集成 Quartz

Quartz  下载地址 :

 

          http://grepcode.com/snapshot/repo1.maven.org/maven2/org.quartz-scheduler/quartz/1.7.3

 

首先下载包 :quartz-1.7.3.jar  (我上传到附件咯,嘿嘿)

 

把包放到 lib 里面。

 

applicationContext.xml:

 

	<!-- Timer schedule -->

	<!--要调度的对象-->
	<bean id="jobBean" class="net.xsbiz.common.MakeHtml" />
	<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="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" >
 		<property name="triggers">
 			<list>
 				<!--作业调度器,list下可加入其他的调度器-->
				<ref bean="trigger" />
 			</list>
		</property>
	</bean>

web.xml:

  <!-- 设置Spring的监听,项目启动时候初始化 -->
  <listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 指定Spring配置文件的路径 -->
  <context-param> 
       <param-name>contextConfigLocation</param-name> 
       <param-value>/WEB-INF/classes/applicationContext.xml</param-value>  
  </context-param> 
 

 

MakeHtml.java :

//调用的类
public class MakeHtml {
    //调用的方法
    public void execute(){
		//需要做的事情
	}


         public static void main(String[] args) {
		
		 
	        System.out.println("----begin---"); 

	        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 

	        // 如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化 

	        context.getBean("startQuertz"); 

	        System.out.print("----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

 

   基本上实现起来都容易,只是表达式。。有点。。我到网上搜索了下。。整理放到下面:

 

 

字段名   允许的值   允许的特殊字符
  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触发

 

  以上例子都是我的现实项目改过来的。。。经过测试的。。O(∩_∩)O哈哈哈~

 

  哎。。肚子饿死了。。。。吃东西去。。。中午还没吃东西的。。。。嘿嘿~~~~~~~~

 

 

"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秒触发任务

 

分享到:
评论
11 楼 yangpanwww 2015-12-14  
蓝色骑士Jazz 写道
为什么只写继承Spring...要先写基础怎么用再过度到集成才合理!


基础的有。。看另一个文章
10 楼 yangpanwww 2015-08-10  
蓝色骑士Jazz 写道
为什么只写继承Spring...要先写基础怎么用再过度到集成才合理!


有的,你看前面的博客。。写过的。
9 楼 蓝色骑士Jazz 2015-08-07  
为什么只写继承Spring...要先写基础怎么用再过度到集成才合理!
8 楼 gotosuzhou 2015-07-30  
提供的jar下载 很有用处,谢谢分享
7 楼 harim 2015-07-11  
好文章!!
6 楼 buxiao_2005 2015-04-03  
太牛了!必须顶
5 楼 u011202188 2015-03-16  
非常感谢!受教了!     
4 楼 lonelyawolf 2015-02-08  
不错,学习了....  
3 楼 yangpanwww 2015-02-02  
IcemanfanK 写道
laji     


怎么。。哪里有问题?
2 楼 IcemanfanK 2015-01-29  
laji     
1 楼 云上太阳 2015-01-21  
好东西怎么没人顶, 请不要停止创作

相关推荐

    学习笔记_Quartz作业调度框架,使用corn表达式

    Quartz作业调度框架是Java开发中的一个强大工具,用于实现定时任务和工作流管理。它以其灵活性、可扩展性和稳定性而被广泛应用。本学习笔记主要围绕Quartz的使用,特别是如何利用corn表达式来设置定时任务。 Quartz...

    quartz开源作业调度框架

    ### quartz开源作业调度框架知识点详解 #### 一、Quartz框架简介 Quartz是一个功能强大的、开源的作业调度框架,完全由Java编写而成。它能够被应用在服务器端的Java应用程序中,帮助开发者轻松地创建并管理定时任务...

    Quartz一个开源的作业调度框架

    Quartz是一个广泛应用于企业级应用中的开源作业调度框架,它为开发者提供了强大的任务调度功能,使得应用程序能够在预定的时间执行特定的任务。Quartz的核心设计目标是简单易用且可高度扩展,能够满足从小型项目到...

    Quartz - 作业调度框架

    Quartz是一款广泛应用于Java环境中的开源作业调度框架,它的核心功能是实现任务的自动化执行,如定时触发、周期性执行等。Quartz以其强大的灵活性和稳定性,在企业级应用中占据了重要地位,尤其对于需要定时执行任务...

    Quartz一个开源作业调度框架

    Quartz 是一个强大的开源作业调度框架,主要用于自动化执行任务,如定时发送邮件、执行数据清理、执行批处理等。该框架完全用 Java 编写,兼容 J2SE 和 J2EE 环境,提供了丰富的功能和灵活性,使得开发者能够方便地...

    Quartz(作业调度)

    Quartz是一款开源的作业调度框架,它为Java应用程序提供了强大的定时任务处理能力。在Spring框架中,Quartz可以被集成来实现复杂的定时任务调度。本文将深入探讨Quartz的使用,包括其基本概念、配置、API以及在Web...

    Quartz.NET是一个开源的作业调度框架

    Quartz.NET是一个强大的开源作业调度框架,主要用于C#编程环境中,它允许开发者在应用程序中创建、安排和执行任务。这个框架的设计目标是提供一个灵活、可靠的解决方案,使得开发者可以轻松地构建定时任务,以实现...

    quartz任务调度框架简单实用小demo

    Quartz是一个开源的作业调度框架,它为Java应用程序提供了强大的定时和计划功能。在Java项目中,Quartz常被用来执行周期性的任务,比如数据备份、日志清理、定时发送邮件等。本“quartz任务调度框架简单实用小demo”...

    Quartz任务调度框架简介

    Quartz是一个开源的作业调度框架,它用于在Java应用程序中实现复杂的定时任务。Quartz的主要功能是安排作业(Job)在特定的时间点执行,这些作业可以是任何实现了Quartz接口的任务,比如数据处理、文件传输、邮件...

    quartz作业调度测试

    Quartz是一款开源的作业调度框架,它允许开发者创建、组织和执行定时任务。在Java开发环境中,Quartz常被用于实现复杂的工作调度需求,比如定时发送邮件、执行数据同步或者在特定时间运行某些业务逻辑。这个"quartz...

    quartz作业调度Demo

    Quartz作业调度是一个开源的Java作业调度框架,它允许开发者创建、调度和执行应用程序中的重复或定时任务。这个"quartz作业调度Demo"提供了一个简单的示例,帮助我们理解如何在实际项目中利用Quartz来管理任务。 1....

    Quartz作业调度器

    Quartz作业调度器是Java平台上的一个开源任务调度框架,广泛应用于企业级应用中,用于自动化执行周期性任务。Spring框架提供了对Quartz的集成,使得在Spring应用中使用Quartz变得更加便捷。这个压缩包文件可能包含了...

    quartz 2.1.2 for .net 作业调度框架

    Quartz 2.1.2 for .NET 是一个强大的、完全开源的作业调度框架,专为.NET环境设计。它提供了一种高度可配置的方式,使开发者能够轻松地在应用程序中添加定时任务执行的功能。这个框架使得开发人员可以定义作业(Jobs...

    作业调度Quartz.net源代码

    Quartz.NET是一个开源的工作调度框架,它允许开发者在.NET环境中创建和执行计划任务。这个“作业调度Quartz.net源代码”文件很可能是包含了Quartz.NET的示例代码或者一个简单的项目,帮助用户理解和学习如何使用...

    作业调度框架Quartz1.8

    Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的...

    quartz作业调度demo

    Quartz是一款开源的作业调度框架,它允许开发者创建、组织和执行定时任务。在Java开发环境中,Quartz被广泛用于实现应用程序的自动化任务执行,比如数据清理、定期发送邮件、执行统计分析等。本示例"quartz作业调度...

Global site tag (gtag.js) - Google Analytics