<%@ page contentType="text/html; charset=gb2312"%> Spring的任务调度服务实例讲解
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
Spring的任务调度服务实例讲解
     发布者: 发布时间:2007-03-26
记的以前在做一家人才招聘网站时遇到的一个问题,因为白天的流量非常大为了减轻网站的压力所以客户要求一些不是太急手的任务(如,给注册用户发送邮件、清理日常垃圾信息等等)都放在凌晨流量最小的时间段去执行,当时我们借助java.util.Timer来实现的。但是对于更加复杂的任务调度Timer就不太容易了,后来了解了Quartz(OpenSymphony的提供任务调务类库)可以大大弥补Timer的不足可以使开发者能够完成各种复杂的任务调度。Spring又对其提供了很好的支持使得开发者不用另外去学习这套全新的类库就能很方便的使用。

下面提供一个实例来讲解:

1. 首先把spring.jar包放到classpath下

2. 编辑spring配制文件,ApplicationContext.xml内容如下:

代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" >  
  3. <beans>  
  4.      <!—要调度的对象-->  
  5.     <bean id="testQuarz" class="springtimer.TestQuarz" />  
  6.   
  7.     <!--定义定时执行testQuarz 这个bean中的sayHello()方法-->  
  8.     <bean id="helloworldTask"   class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  9.         <property name="targetObject">  
  10.             <ref bean="testQuarz" />  
  11.         </property>  
  12.         <property name="targetMethod">  
  13.             <value>sayHello</value>  
  14.         </property>  
  15.     </bean>  
  16.   
  17.     <!--触发器的bean的设置,在这里我们设置了我们要触发的jobDetail是哪个。这里我们定义了要触发的jobDetail是helloworldTask,即触发器去触发哪个bean..并且我们还定义了触发的时间:每天5:17pm-->  
  18.     <bean id="cronTrigger"  
  19.         class="org.springframework.scheduling.quartz.CronTriggerBean">  
  20.         <property name="jobDetail">  
  21.             <ref bean=" helloworldTask " />  
  22.         </property>  
  23.         <property name="cronExpression">  
  24.             <!-- 关键在配置此表达式 -->  
  25.             <value>0 17 17 * * ?</value>  
  26.         </property>  
  27.     </bean>  
  28.   
  29.     <!--管理触发器的总设置,管理我们的触发器列表,可以在bean的list中放置多个触发器。   
  30.     -->  
  31.     <bean autowire="no"  
  32.         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  33.         <property name="triggers">  
  34.             <list>  
  35.                 <ref local="cronTrigger" />  
  36.             </list>  
  37.         </property>  
  38.     </bean>  
  39. </beans>  

3.以下是被调度的类代码

代码
  1. package springtimer;   
  2.   
  3. ublic class TestQuarz {   
  4.   
  5.  public void sayHello() {   
  6.    System.out.println("HelloWorld! ");   
  7.  }   

4,提供测试类

代码
  1. public class TestHello {   
  2.   
  3. public static void main(String[] args) {   
  4. // 只要加载配置文件就可以了,   
  5. ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");   
  6. System.out.println("*****完毕******");   
  7. }  

5,Ok自已可以设置sping-config文件中<value>0 17 17 * * ?</value>的调度表达式,可以测试啦!

6, 下面简单的介绍一下cron expressions(调度表达式)

格式列表:

代码
  1. Field Name  | Mandatory?    | Allowed Values    | Allowed Special Characters   
  2. Seconds          |  YES        |  0-59           |  , - * /   
  3. Minutes          |  YES        |  0-59           |  , - * /   
  4. Hours            |  YES        |  0-23           |  , - * /   
  5. Day of month    |  YES         |  1-31           |  , - * ? / L W C   
  6. Month            |  YES        |  1-12 or JAN-DEC   |  , - * /   
  7. Day of week |  YES         |  1-7 or SUN-SAT    |  , - * ? / L C #   
  8. Year             |  NO         |  empty, 1970-2099  |  , - * /  

至于详细的解释你一看例子就会明白

例子列表如下:
表达式 解释
0 0 12 * * ? 在每天中午12:00触发
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:00至2:59之间每分钟触发一次
0 0/5 14 * * ? 每天在下午2:00至2:59之间每5分钟触发一次
0 0/5 14,18 * * ? 每天在下午2:00至2:59和6:00至6:59之间的每5分钟触发一次
0 0-5 14 * * ? 每天在下午2:00至2:05之间每分钟触发一次
0 10,44 14 ? 3 WED 每三月份的星期三在下午2:00和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, 2003, 2004 and 2005年的每个月的最后一个星期五的上午10:15触发
0 15 10 ? * 6#3 在每个月的第三个星期五的上午10:15触发
0 0 12 1/5 * ? 从每月的第一天起每过5天的中午12:00时触发
0 11 11 11 11 ? 在每个11月11日的上午11:11时触发.

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
学习Oracle中Blob和Clob一点点心得
Java的类装载器和命名空间
JAVA中浅复制与深复制概念详细解析
基于JAVA的电子政务系统整体解决方案
线性报表解释
IIS6.0与Resin_3.0.8的整合
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(541)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(9334)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(4703)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(7420)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(4377)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(1875)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(1769)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(4065)
        
回复:Spring的任务调度服务实例讲解
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号