首页 > 代码库 > 分享Spring Scheduled定时器的用法
分享Spring Scheduled定时器的用法
摘要:在coding中经常会用到定时器,指定每隔1个小时,或是每天凌晨2点执行一段代码段,若是使用java.util.Timer来做这种事情,未免重复造轮子。幸亏Spring中封装有定时器,而且非常好用,采用注解的形式配置某时某刻执行一段代码段。在之前的项目中使用过一次,下面就把代码、配置一并分享与大家。
关键词:Spring, JAVA, Scheduled, 定时器
一、
首先写一个Handler接口(“定时器Handler”),用以说明实现这一接口的类做的处理逻辑都是由定时器驱动的。
1 /* 2 *文件名:ITimeFlickerHandler.java 3 *版权:王安琪 4 *描述:时钟消息处理接口 5 *修改时间:2014-01-13 6 *修改内容:新增 7 */ 8 9 public interface ITimeFlickerHandler {10 11 void handle();12 }
二、
编写定时器驱动,设置某时某刻执行哪些代码,从而驱动“定时器Handler”。
1 /* 2 *文件名:TimeFlicker.java 3 *版权:王安琪 4 *描述:时钟触发源 5 *修改时间:2014-01-13 6 *修改内容:新增 7 */ 8 9 import java.util.ArrayList;10 import java.util.List;11 12 import org.slf4j.Logger;13 import org.slf4j.LoggerFactory;14 import org.springframework.scheduling.annotation.Scheduled;15 16 /**17 * 时钟触发源18 * 19 * @author wanganqi20 * 21 */22 public class TimeFlicker {23 24 private static final Logger logger = LoggerFactory25 .getLogger(LocatingSourceFilter.class);26 27 private List<ITimeFlickerHandler> handlers = new ArrayList<ITimeFlickerHandler>();28 29 /**30 * 通过配置文件获取要调用的时钟消息处理类31 * 32 * @return33 */34 public List<ITimeFlickerHandler> getHandlers() {35 return handlers;36 }37 38 public void setHandlers(List<ITimeFlickerHandler> handlers) {39 this.handlers = handlers;40 }41 42 // 每一个小时30分00秒执行处理43 @Scheduled(cron = "0 30 * * * ?")44 public void run() {45 for (ITimeFlickerHandler handler : handlers) {46 handler.handle();47 }48 }49 }
三、
实现“定时器Handler”接口,实现定时器事件触发时的处理逻辑。
1 /* 2 *文件名:Monitor.java 3 *版权:王安琪 4 *描述:监控处理 5 *修改时间:2013-12-10 6 *修改内容:新增 7 */ 8 9 import org.slf4j.Logger;10 import org.slf4j.LoggerFactory;11 12 public class Monitor implements ITimeFlickerHandler {13 14 private static final Logger logger = LoggerFactory15 .getLogger(LocatingSourceFilter.class);16 17 /**18 * 定时时间到,更新所有电子围栏缓存19 * 20 * @see ITimeFlickerHandler#handle()21 */22 @Override23 public void handle() {24 EF[] res = null;25 try {26 res = service.GetEF();27 } catch (Exception e) {28 logger.error("This is error message");29 }30 EFB.setBuffer(res);31 }32 }
四、
配置Spring,注入“定时器Handler”,Spring配置文件bean.xml如下。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:task="http://www.springframework.org/schema/task" 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/task http://www.springframework.org/schema/task/spring-task-3.1.xsd "> 7 8 <!-- 处理器相关 --> 9 <task:annotation-driven />10 <bean id="Monitor"11 class="com.imp.Monitor" />12 <bean id="TimeFlicker" class="com.imp.TimeFlicker">13 <property name="handlers">14 <list>15 <ref bean="Monitor" />16 </list>17 </property>18 </bean>19 </beans>
五、
生成、获取Spring应用上下文,并编写测试用例......。
1 import org.springframework.context.support.AbstractApplicationContext; 2 import org.springframework.context.support.FileSystemXmlApplicationContext; 3 4 public class AppContext { 5 6 private static AbstractApplicationContext dispatchContext; 7 8 /** 9 * 以单例模式获取上下文10 * 11 * @return 上下文12 */13 public static AbstractApplicationContext getDispatchContext() {14 if (dispatchContext == null)15 dispatchContext = new FileSystemXmlApplicationContext(16 "classpath:bean.xml");17 return dispatchContext;18 }19 }
这个定时器真是简洁又极其有用的,至今还没有发现它有什么缺点,不知道C#中有没有这么一个小工具,能提高代码编写效率,知晓之人可以告之。
如有引用,请注明来自 http://www.cnblogs.com/wgp13x/ ,另外推荐一篇我刚写的博客:
如何写一篇论文,<一种低耗能的数据融合隐私保护算法ESPART> (计算机学报2011-5,王安琪)
来自王安琪(http://www.cnblogs.com/wgp13x/p/3885665.html)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。