Quartz作业调度框架

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

 

Xml代码   收藏代码
  1. <!-- Timer schedule -->  
  2.   
  3. <!--要调度的对象-->  
  4. <bean id="jobBean" class="net.xsbiz.common.MakeHtml" />  
  5. <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  6.     <property name="targetObject" ref="jobBean" />  
  7.     <property name="targetMethod" value="execute" />  
  8.     <!--将并发设置为false-->  
  9.     <property name="concurrent" value="false" />  
  10. </bean>  
  11.   
  12. <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  13.         <property name="jobDetail" ref="jobDetail" />  
  14.                 <!--表达式,我的是每 30 执行一次-->  
  15.                <property name="cronExpression" value="0/30 * * * * ?" />  
  16. </bean>  
  17.   
  18. <!--  总管理类如果将lazy-init='false'那么容器启动就会执行调度程序   -->  
  19. <bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" >  
  20.         <property name="triggers">  
  21.             <list>  
  22.                 <!--作业调度器,list下可加入其他的调度器-->  
  23.             <ref bean="trigger" />  
  24.             </list>  
  25.     </property>  
  26. </bean>  

web.xml:

Xml代码   收藏代码
  1.  <!-- 设置Spring的监听,项目启动时候初始化 -->  
  2.  <listener>  
  3. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  4.  </listener>  
  5.  <!-- 指定Spring配置文件的路径 -->  
  6.  <context-param>   
  7.       <param-name>contextConfigLocation</param-name>   
  8.       <param-value>/WEB-INF/classes/applicationContext.xml</param-value>    
  9.  </context-param>   

 

MakeHtml.java :

Java代码   收藏代码
  1. //调用的类  
  2. public class MakeHtml {  
  3.     //调用的方法  
  4.     public void execute(){  
  5.         //需要做的事情  
  6.     }  
  7.   
  8.   
  9.          public static void main(String[] args) {  
  10.           
  11.            
  12.             System.out.println("----begin---");   
  13.   
  14.             ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");   
  15.   
  16.             // 如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化   
  17.   
  18.             context.getBean("startQuertz");   
  19.   
  20.             System.out.print("----end---");  
  21.             
  22.   
  23.     }  
  24.   
  25. }  

 

   1 、JobDetail JobDetail是一个具体的类。

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

   3、 Scheduler SchedulerFactoryScheduler负责管理 Trigger、调度 JobSchedulerFactory则是 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触发
 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
Quartz 是一个开源的作业调度框架,可以用来实现在特定的时间触发任务执行。它支持灵活的调度配置,可以按照预定的时间间隔、日期、月份等触发作业的执行。Quartz 提供了可靠性和强大的功能,可以用于构建各种类型的调度应用程序,包括定时任务、周期性任务、分布式任务等。 Quartz 提供了一个简单易用的 API,可以用 Java 或者其他支持 Java 的语言进行开发。它的核心概念是 Job(作业)和 Trigger(触发器)。Job 是具体要执行的任务,而 Trigger 则定义了作业执行的时间规则。 使用 Quartz,你可以创建一个作业类实现 Job 接口,并在其中定义具体要执行的任务逻辑。然后,通过创建 Trigger 对象来指定作业的执行时间规则,可以是一个特定的时间点、重复的时间间隔、每天固定时间执行等等。 Quartz 还提供了一些高级功能,例如集群支持、持久化存储、错过触发处理等。集群支持可以让多个节点共享作业调度,提高系统的可用性和可伸缩性。持久化存储可以将作业和触发器的配置信息保存到数据库中,从而实现持久化和恢复。错过触发处理可以在作业错过预定执行时间时进行处理,例如立即执行、延迟执行或者忽略执行等。 总而言之,Quartz 是一个功能强大、灵活可靠的作业调度框架,适用于各种类型的调度应用程序开发。无论是简单的定时任务还是复杂的分布式任务调度,Quartz 都可以提供良好的支持和解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值