摘要:在coding中经常会用到定时器,指定每隔1个小时,或是每天凌晨2点执行一段代码段,若是使用java.util.Timer来做这种事情,未免重复造轮子。幸亏Spring中封装有定时器,而且非常好用,采用注解的形式配置某时某刻执行一段代码段。在之前的项目中使用过一次,下面就把代码、配置一并分享与大家。
关键词:Spring, JAVA, Scheduled, 定时器

一、
首先写一个Handler接口(“定时器Handler”),用以说明实现这一接口的类做的处理逻辑都是由定时器驱动的。
 /*
*文件名:ITimeFlickerHandler.java
*版权:王安琪
*描述:时钟消息处理接口
*修改时间:2014-01-13
*修改内容:新增
*/ public interface ITimeFlickerHandler { void handle();
}
 
二、
编写定时器驱动,设置某时某刻执行哪些代码,从而驱动“定时器Handler”。
 /*
*文件名:TimeFlicker.java
*版权:王安琪
*描述:时钟触发源
*修改时间:2014-01-13
*修改内容:新增
*/ import java.util.ArrayList;
import java.util.List; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled; /**
* 时钟触发源
*
* @author wanganqi
*
*/
public class TimeFlicker { private static final Logger logger = LoggerFactory
.getLogger(LocatingSourceFilter.class); private List<ITimeFlickerHandler> handlers = new ArrayList<ITimeFlickerHandler>(); /**
* 通过配置文件获取要调用的时钟消息处理类
*
* @return
*/
public List<ITimeFlickerHandler> getHandlers() {
return handlers;
} public void setHandlers(List<ITimeFlickerHandler> handlers) {
this.handlers = handlers;
} // 每一个小时30分00秒执行处理
@Scheduled(cron = "0 30 * * * ?")
public void run() {
for (ITimeFlickerHandler handler : handlers) {
handler.handle();
}
}
}
 
三、
实现“定时器Handler”接口,实现定时器事件触发时的处理逻辑。
 /*
*文件名:Monitor.java
*版权:王安琪
*描述:监控处理
*修改时间:2013-12-10
*修改内容:新增
*/ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class Monitor implements ITimeFlickerHandler { private static final Logger logger = LoggerFactory
.getLogger(LocatingSourceFilter.class); /**
* 定时时间到,更新所有电子围栏缓存
*
* @see ITimeFlickerHandler#handle()
*/
@Override
public void handle() {
EF[] res = null;
try {
res = service.GetEF();
} catch (Exception e) {
logger.error("This is error message");
}
EFB.setBuffer(res);
}
}
 
四、
配置Spring,注入“定时器Handler”,Spring配置文件bean.xml如下。
 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd "> <!-- 处理器相关 -->
<task:annotation-driven />
<bean id="Monitor"
class="com.imp.Monitor" />
<bean id="TimeFlicker" class="com.imp.TimeFlicker">
<property name="handlers">
<list>
<ref bean="Monitor" />
</list>
</property>
</bean>
</beans>

五、

生成、获取Spring应用上下文,并编写测试用例......。
 import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext; public class AppContext { private static AbstractApplicationContext dispatchContext; /**
* 以单例模式获取上下文
*
* @return 上下文
*/
public static AbstractApplicationContext getDispatchContext() {
if (dispatchContext == null)
dispatchContext = new FileSystemXmlApplicationContext(
"classpath:bean.xml");
return dispatchContext;
}
}
这个定时器真是简洁又极其有用的,至今还没有发现它有什么缺点,不知道C#中有没有这么一个小工具,能提高代码编写效率,知晓之人可以告之。
 

如有引用,请注明来自http://www.cnblogs.com/wgp13x/ ,另外推荐一篇我刚写的博客:

如何写一篇论文,<一种低耗能的数据融合隐私保护算法ESPART> (计算机学报2011-5,王安琪)

分享Spring Scheduled定时器的用法的更多相关文章

  1. Spring Boot使用@Scheduled定时器任务

      摘要: Spring Boot之使用@Scheduled定时器任务 假设我们已经搭建好了一个基于Spring Boot项目,首先我们要在Application中设置启用定时任务功能@EnableS ...

  2. Spring Boot 使用@Scheduled定时器任务

    摘要: Spring Boot之使用@Scheduled定时器任务 假设我们已经搭建好了一个基于Spring Boot项目,首先我们要在Application中设置启用定时任务功能@EnableSch ...

  3. Spring @Scheduled应用解析

    最近,遇到的一个需求,需要执行定时任务,每个一定时间需要执行某个方法 因为项目是SpringMVC的项目,所以使用的是Spring @Scheduled(由于quartz应用起来太麻烦,所以没有采用) ...

  4. 使用轻量级Spring @Scheduled注解执行定时任务

    WEB项目中需要加入一个定时执行任务,可以使用Quartz来实现,由于项目就一个定时任务,所以想简单点,不用去配置那些Quartz的配置文件,所以就采用了Spring @Scheduled注解来实现了 ...

  5. Spring任务调度定时器

    1.在spring-context.xml配置 <!-- 计划任务配置,用 @Service @Lazy(false)标注类,用@Scheduled(cron = "0 0 2 * * ...

  6. javascript中window与document对象、setInterval与setTimeout定时器的用法与区别

    一.写在前面 本人前端菜鸟一枚,学习前端不久,学习过程中有很多概念.定义在使用时容易混淆,在此给向我一样刚踏入前端之门的童鞋们归纳一下.今天给大家分享一下js中window与document对象.se ...

  7. spring计划任务,springMvc计划任务,Spring@Scheduled,spring定时任务

    spring计划任务,springMvc计划任务,Spring@Scheduled,spring定时任务 >>>>>>>>>>>> ...

  8. Spring MVC RedirectAttributes的用法解决办法

    Spring MVC RedirectAttributes的用法很久没发过技术贴了,今天对于一个问题纠结了2小时,遂放弃研究用另一种方法解决,奈何心中一直存在纠结,发帖求解 我先解释下什么是Redir ...

  9. 框架源码系列十:Spring AOP(AOP的核心概念回顾、Spring中AOP的用法、Spring AOP 源码学习)

    一.AOP的核心概念回顾 https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/core.html#a ...

随机推荐

  1. php中preg正则函数使用

    1.preg_match和preg_match_all的区别 preg_match和 preg_match_all区别是preg_match只匹配一次.而preg_match_all全部匹配,直到字符 ...

  2. sed常用命令

    sed也是一个管道命令. sed [-nefr] [动作] -n 加上-n参数后,只有经过sed特殊处理的那些行才会被列出来 -e 直接在命令行模式进行sed的动作编辑 -i  直接修改读取的文件内容 ...

  3. Firebird DatabaseAccess WireCrypt DB2Provider

    目前最新的Firebird版本是:3.0.3 使用过程的一些必经问题,嵌入式的模式就不再说了. 在使用标准Server版时,第一个要考虑的就是数据库文件的存放位置,默认配置放在windows/syst ...

  4. 原创:微信小程序java实现AES解密并获取unionId

    来自:微信小程序联盟 如果大家使用小程序的同时还在使用公众号的话,可能会用到unionId这种功能,由于公司业务需要,我们需要使用unionId,具体使用方法,请参考微信开放平台的说明,但是在微信小程 ...

  5. html/JS onload的详解

    等待页面都加载完后再执行 <!DOCTYPE html><html lang="en"><head> <meta charset=&quo ...

  6. 给tomcat7w.exe改名字

    在平常使用tomcat的过程中,经常会在自己的电脑上安装两个tomcat,而且使用tomcat的tomcat7w.exe界面比较方便,即 但是两个tomcat的名字一样,也只能启动一个tomcat. ...

  7. pyhton中list的基本操作

    list:可以按规则,按顺序,存取大量数据 1.增 append() 在列表尾部追加元素 insert() 按照列表索引添加元素 extend() 迭代添加元素,一次添加多个元素 2.删 pop() ...

  8. float、display和流

    一.css的元素有很深的道理和它存在的意义 块元素:默认元素的上下左右会有间隔(即使设置margin.padding为0也一样).如果想0间隔,考虑float. float:会使元素自动生成一个块级框 ...

  9. CSS的伪类 :before 和 :after

    CSS 有两个说不上常用的伪类 :before 和 :after,偶尔会被人用来添加些自定义格式什么的,但是它们的功用不仅于此.前几天发现了 Creative Link Effects 这个非常有意思 ...

  10. Sass初入门

    什么是CSS预处理器? CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,然后开发者就只要使用这种语言进行编码工作.   什 ...