spring timer 基础应用

调度事物:

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

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



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

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

  1. packagecn.partner4java.timer;
  2. importjava.util.TimerTask;
  3. /**
  4. * 每天告诉你爱我
  5. * @author Administrator
  6. *
  7. */
  8. publicclassTellLoveMeTaskextendsTimerTask {
  9. publicvoidrun() {
  10. System.out.println("小媳妇我爱你");
  11. }
  12. }


配置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. <beanclass="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. <!-- 对Spring容器进行实例化 -->
  6. <listener>
  7. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  8. </listener>

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



配置配置文件
  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. 0010,14,16* * ? 每天上午十点,下午两点,下午四点
  37. 00,15,30,45*1-10* ? 每月前十天每个十五分钟
  38. 300011?2012201211日午夜过三十秒
  39. 008-5? * MON-FRI 每个工作日的工作时间
  40. -->
  41. <!-- 启动器 -->
  42. <beanclass="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  43. <property name="triggers">
  44. <list>
  45. <ref bean="cronGoodNightTrigger"/>
  46. </list>
  47. </property>
  48. </bean>

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

  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>

你可能感兴趣的:(spring)