spring定时器(转载)

本文介绍Spring框架下两种实现定时任务的方法。一种使用ScheduledTimerTask配合TimerFactoryBean实现简单定时任务;另一种利用Quartz进行复杂定时任务配置,包括精确指定执行时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

applicationContext.xml

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3. xmlns="http://www.springframework.org/schema/beans"  
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
  6.   
  7.   
  8. <bean id="mesBean" class="cn.xg.spring.Message" abstract="false"  
  9.    lazy-init="default" autowire="default" dependency-check="default">  
  10.    <property name="title">  
  11.     <value>标题</value>  
  12.    </property>  
  13. </bean>  
  14.   
  15. <!-- spring定时器 -->  
  16. <!-- 方法一 -->  
  17. <!-- 第一步 声明一个定时任务,该类extends java.util.TimerTask -->  
  18. <bean id="clock" class="cn.xg.spring.Clock"></bean>  
  19.   
  20. <!-- 第二步 调度定时任务,把声明的定时任务注入进来,并设置定时参数 -->  
  21. <bean id="scheduledClock" class="org.springframework.scheduling.timer.ScheduledTimerTask">  
  22.    <property name="timerTask">  
  23.     <ref bean="clock"></ref>  
  24.    </property>  
  25.    <property name="period">  
  26.     <value>5000</value>  
  27.     <!--这里是每隔多长时间就进行一次计时任务,单位ms-->  
  28.    </property>  
  29.    <property name="delay">  
  30.     <value>5000</value>  
  31.     <!--这里是服务启动后延时多少时间,开始计时任务,单位ms-->  
  32.    </property>  
  33. </bean>  
  34.   
  35. <!-- 启动定时任务,如果有多个定时任务,则重复步骤一,二,然后把第二步设置的beany放在下面的list列表中.此方法不能精确几点运行定时任务 -->  
  36. <bean class="org.springframework.scheduling.timer.TimerFactoryBean">  
  37.    <property name="scheduledTimerTasks">  
  38.     <list>  
  39.      <ref bean="scheduledClock"></ref>  
  40.     </list>  
  41.    </property>  
  42. </bean>  
  43.   
  44. <!-- 方法二 -->  
  45. <!-- 第一步 声明一个定时任务,注意不是直接声明,而是声明一个JobDetailBean,通过jobClass属性设置一个定时对象 -->  
  46. <bean id="quartzClock" class="org.springframework.scheduling.quartz.JobDetailBean">  
  47.    <property name="jobClass">  
  48.     <value>cn.xg.spring.QuartzClock</value>  
  49.    </property>  
  50. </bean>  
  51.   
  52. <!-- 第二步 调度定时任务 -->  
  53. <!--这种配置与第一种方法效果一样    
  54.    <bean id="quartzClockTask" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
  55.     <property name="jobDetail">  
  56.      <ref bean="quartzClock"/>  
  57.     </property>  
  58.     <property name="startDelay">  
  59.      <value>6000</value>  
  60.       这里是服务启动后延时多少时间,开始计时任务,单位ms   
  61.     </property>  
  62.     <property name="repeatInterval">  
  63.      <value>6000</value>  
  64.         这里是每隔多长时间就进行一次计时任务,单位ms   
  65.     </property>  
  66.    </bean>  
  67. -->  
  68. <!-- 这种配置可以精确几点执行定时任务 -->  
  69. <bean id="cronQuartzClock" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  70.    <property name="jobDetail">  
  71.     <ref bean="quartzClock"></ref>  
  72.    </property>  
  73.    <property name="cronExpression">  
  74.     <value>0 52 22 * * ?</value><!--定时在任何月份任何日期(不管星期几)的22点52分0秒 -->  
  75.      <!-- 一个cron表达式有到少6个(也可能是7个)由空格分隔的时间元素.从左到右,这些元素的定义如下:   
  76.       1.秒(0-59)   
  77.       2.分钟(0-59)   
  78.       3.小时(0-23)   
  79.       4.月份中的是期(1-31)   
  80.       5.月份(1-12或SUN-DEC)   
  81.       6.星期中的日期(1-7或SUN-SAT)   
  82.       7.年份(1970-2099)    
  83.      例子:   
  84.       0 0 10,14,16 * * ? 每天上午10点,下午2点和下午4点   
  85.       0 0,15,30,45 * 1-10 * ? 每月前10天每隔15分钟   
  86.       30 0 0 1 1 ? 2012 在2012年1月1日午夜过30秒时   
  87.       0 0 8-5 ? * MON-FRI 每个工作日的工作时间   
  88.         
  89.       - 区间   
  90.       * 通配符   
  91.       ? 你不想设置那个字段   
  92.      -->  
  93.    </property>  
  94.      
  95. </bean>  
  96. <!--第三步 启动定时任务,注意这里的ref bean -->  
  97. <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  98.    <property name="triggers">  
  99.     <list>  
  100.      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值