此定时器可重置定时时间。
1. spring的定时器配置文件application.
1 <??> 2 <beans ="http://www.springframework.org/schema/beans" ="http://www.w3.org/2001/ 3 ="http://www.springframework.org/schema/tx" ="http://www.springframework.org/schema/aop" 4 ="http://www.springframework.org/schema/context" ="http://www.directwebremoting.org/schema/spring-dwr" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 6 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 7 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 9 http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd">10 11 <!-- 定时器bean类定义 -->12 <bean id="×××Daemon" class="com.×××.×××.×××Daemon">13 <!-- 指定定时器调度工厂 -->14 <property name="scheduler" ref="timingPrintSchedulerFactory" />15 <!-- 向定时器注入bean -->16 <property name="×××" ref="×××" />17 </bean>18 19 <!-- 任务1定义 --> 20 <bean id="×××DaemonJob" 21 class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">22 <!-- 任务1所在的类 -->23 <property name="targetObject" ref="×××Daemon" />24 <!-- 任务1所对应的方法名 -->25 <property name="targetMethod" value="executeInternal" />26 <property name="concurrent" value="false" />27 </bean> 28 29 <!-- 任务1触发器 -->30 <bean id="×××JobTrigger" 31 class="org.springframework.scheduling.quartz.CronTriggerBean">32 <property name="jobDetail" ref="×××DaemonJob"/>33 <property name="cronExpression" value="0 0 0 ? * *"/> <!-- 默认每天凌晨0点整打印 --> 34 <property name="startDelay" value="10000"/> <!-- 延迟10秒(10000毫秒)启动 -->35 </bean>36 37 <!-- 重置定时时间任务 --> 38 <bean id="reset×××DaemonJob" 39 class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 40 <property name="targetObject" ref="×××Daemon" />41 <property name="targetMethod" value="resetJob" />42 <property name="concurrent" value="false" />43 </bean> 44 45 <!-- 重置定时时间任务触发器 -->46 <bean id="reset×××JobTrigger" 47 class="org.springframework.scheduling.quartz.SimpleTriggerBean">48 <property name="jobDetail" ref="reset×××DaemonJob"/>49 <property name="repeatInterval" value="10000"/> <!-- 每隔10秒扫描一次 --> 50 <property name="startDelay" value="10000"/> <!-- 延迟10秒(10000毫秒)启动 -->51 </bean> 52 53 <!-- 调度工厂,触发器集合 -->54 <bean id="timingPrintSchedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">55 <property name="triggers">56 <list> 57 <ref bean="×××JobTrigger"/>58 <ref bean="reset×××JobTrigger"/>59 </list>60 </property>61 </bean> 62 63 </beans>
View Code
2. 定时器对应的类
1 import org.quartz.Scheduler; 2 import org.springframework.scheduling.quartz.CronTriggerBean; 3 4 5 public class ×××Daemon { 6 7 /** 8 * 调度工厂,可取得所属的触发器 9 */10 private Scheduler scheduler; 11 12 /**13 * 任务1执行的方法14 */15 protected void executeInternal(){16 // To do something17 }18 19 /**20 * 重置定时时间任务的方法21 */22 public void resetJob()throws Exception{ 23 String cronExpression = transformTime(×××);// 时间格式如:03:30 下午24 CronTriggerBean trigger = (CronTriggerBean)scheduler.getTrigger("×××JobTrigger",Scheduler.DEFAULT_GROUP); 25 String originConExpression = trigger.getCronExpression(); 26 if(!originConExpression.equalsIgnoreCase(cronExpression)){ 27 trigger.setCronExpression(cronExpression); 28 scheduler.rescheduleJob("×××JobTrigger", Scheduler.DEFAULT_GROUP, trigger); 29 } 30 }31 32 /**33 * 将时间转换为cron表达式34 * @param time 时间字符串,格式如:03:30 下午35 * @return36 */37 private String transformTime(String time){38 StringBuffer result = new StringBuffer();39 String[] arr = time.split(" ");40 String[] timeArr = arr[0].split(":");41 result.append("0 "+timeArr[1]+" ");42 if("上午".equalsIgnoreCase(arr[1])){43 result.append(Integer.valueOf(timeArr[0])%12);44 }else{45 result.append(12+Integer.valueOf(timeArr[0])%12);46 }47 result.append(" ? * *");48 return result.toString();49 }50 51 public Scheduler getScheduler() {52 return scheduler;53 }54 public void setScheduler(Scheduler scheduler) {55 this.scheduler = scheduler;56 }57 58 59 }
View Code
原标题:spring定时器(二)
关键词:Spring