spring timer 基础应用

调度事物: 

从java 1.3开始,java sdk就通过java.until.Timer类提供基本的调度功能。 

这个类允许你调度一个任务(通过java.until.TimerTask子类定义)按任意周期运行。 



Spring通过TimerFactoryBean向应用程序上下文提供对JavaTimer的支持。 

1、使用Java Timer调度任务 
创建类TellLoveMeTask extends TimerTask 

  1. package cn.partner4java.timer;  
  2.   
  3. import java.util.TimerTask;  
  4.   
  5. /** 
  6. * 每天告诉你爱我 
  7. * @author Administrator 
  8. * 
  9. */  
  10. public class TellLoveMeTask extends TimerTask {  
  11.   
  12.     public void run() {  
  13.         System.out.println("小媳妇我爱你");  
  14.     }  
  15.   
  16. }  


配置spring文件:beans-timer.xml
  1. <!-- 在spring中声明我的定时器 当然,我们就可以按照通用的方式,给他注入一些bean -->  
  2.      <bean id="tellLoveMeTask" class="cn.partner4java.timer.TellLoveMeTask"></bean>  
  3.      <!-- 定义一个调度器,把我们定时器告诉他,告诉他调度时间 -->  
  4.      <bean id="scheduledTimerTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">  
  5.             <property name="timerTask" ref="tellLoveMeTask"></property>  
  6.             <property name="period" value="20000"></property>  
  7.             <!-- 也可以延迟定时器的启动 -->  
  8.             <property name="delay" value="5000"></property>  
  9.      </bean>  
  10.      <!-- 定义一个启动器 -->  
  11.      <bean  class="org.springframework.scheduling.timer.TimerFactoryBean">  
  12.             <property name="scheduledTimerTasks">  
  13.                 <list>  
  14.                     <ref bean="scheduledTimerTask"/>  
  15.                 </list>  
  16.             </property>  
  17.      </bean>  


交到web.xml,好启动spring
  1.     <context-param>  
  2.   <param-name>contextConfigLocation</param-name>  
  3.   <param-value>classpath:beans-timer.xml</param-value>  
  4. </context-param>  
  5.   
  6. <!-- 对Spring容器进行实例化 -->  
  7. <listener>  
  8.   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  9. </listener>  

2、使用Quartz调度器  
那么我们可以反复的说我爱你了,但是我们是否可以每天在确定的时间说晚安呢? 
额外加入包 quartz-all-1.6.0.jar commons-collections.jar jta.jar 
编写类GoodNightDarling extends QuartzJobBean 
  1. package cn.partner4java.timer;  
  2.   
  3. import org.quartz.JobExecutionContext;  
  4. import org.quartz.JobExecutionException;  
  5. import org.springframework.scheduling.quartz.QuartzJobBean;  
  6.   
  7.   
  8. /** 
  9. * 晚安亲爱的 
  10. * @author Administrator 
  11. * 
  12. */  
  13. public class GoodNightDarling extends QuartzJobBean {  
  14.   
  15.   
  16.     protected void executeInternal(JobExecutionContext arg0)  
  17.             throws JobExecutionException {  
  18.         System.out.println("晚安亲爱的");  
  19.     }  
  20.   
  21.   
  22. }  



配置配置文件
  1. <!-- 定义我们每天的晚安 -->  
  2.    <bean id="goodNightDarlingJob" class="org.springframework.scheduling.quartz.JobDetailBean">  
  3.     <property name="jobClass" value="cn.partner4java.timer.GoodNightDarling"></property>  
  4.     <!-- 注入bean -->  
  5.     <!--    
  6.     <property name="jobDataAsMap">  
  7.         <map>  
  8.             <entry key="rantService" value="rantService"></entry>  
  9.         </map>  
  10.     </property>  
  11.     -->  
  12.    </bean>  
  13.    <!-- 这个和我们上面功能上没有上面区别 -->  
  14.    <bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
  15.         <property name="jobDetail" ref="goodNightDarlingJob"></property>  
  16.         <!-- 延迟时间 -->  
  17.         <property name="startDelay" value="200000"></property>  
  18.         <!-- 重复时间 -->  
  19.         <property name="repeatInterval" value="30000"></property>  
  20.    </bean>  
  21.    <!-- 调度一个cron,这个调度器就有所区别了,能够指定每次调动的时间 -->  
  22.    <bean id="cronGoodNightTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  23.         <property name="jobDetail" ref="goodNightDarlingJob"></property>  
  24.         <property name="cronExpression" value="10 * * * * ?"></property>  
  25.    </bean>  
  26.    <!--   
  27.    cornExpression格式:  
  28.    1、秒 0-59  
  29.    2、分钟 0-59  
  30.    3、小时 0-23  
  31.    4、月份中的日期 1-31  
  32.    5、月份 1-12 或者 JAN-DEC  
  33.    6、星期中的日期 1-7 或者SUN-SAT  
  34.    7、年份 1970-2099  
  35.    例子:  
  36.    0 0 10,14,16 * * ? 每天上午十点,下午两点,下午四点  
  37.    0 0,15,30,45 * 1-10 * ? 每月前十天每个十五分钟  
  38.    30 0 0 1 1 ? 2012 在201211日午夜过三十秒  
  39.    0 0 8-5 ? * MON-FRI 每个工作日的工作时间  
  40.     -->  
  41.    <!-- 启动器 -->  
  42.    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  43.         <property name="triggers">  
  44.             <list>  
  45.                 <ref bean="cronGoodNightTrigger"/>  
  46.             </list>  
  47.         </property>  
  48.    </bean>  
  49.      

3、不单独书写定时器  
  1. package cn.partner4java.timer;  
  2.   
  3.   
  4. /** 
  5. * 不用提醒,就应该去做饭 
  6. * @author Administrator 
  7. * 
  8. */  
  9. public class PrepareFood {  
  10.     public void hongShaoQieZi(){  
  11.         System.out.println("做了红烧茄子");  
  12.     }  
  13. }  

  1. <!-- 不单独书写定时器 -->  
  2.   <bean id="invokingPrepareFoodTimerTask" class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">  
  3.         <property name="targetObject" ref="prepareFood"></property>  
  4.         <property name="targetMethod" value="hongShaoQieZi"></property>  
  5.   </bean>  
  6.   <bean id="invokingPrepareFoodJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  7.         <property name="targetObject" ref="prepareFood"></property>  
  8.         <property name="targetMethod" value="hongShaoQieZi"></property>  
  9.   </bean>     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值