摘要:在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. jquery清空下拉框,保留第一个

    js中可以document.getElementById("id").options.length = 1;设置 jquery中的设置方法:$("#id option[i ...

  2. linux 修改用户主目录(转载)

    第一:修改/etc/passwd文件 第二:usermod命令 详细说明如下: 第一种方法: vi /etc/passwd 找到要修改的用户那几行,修改掉即可.此法很暴力,建议慎用. 第二种:user ...

  3. 【转】mvc

    又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了.因为它们都在逻辑上将应用程序划为三块,凑了一个数字3,就有人非要把它们联系到一起了. 这两个东西我接触有几年了,有一点体会,表达一下: ...

  4. JS将文件像form表单一样提交到后台

    这是很简单.. HTML <div> <input type="file" id="myfile"> <input type=&q ...

  5. 暗示net core

    using (var scope = ServiceProvider.CreateScope()){ var aSubscriber = Activator.CreateInstance(aSubsc ...

  6. Java - Latch和Barrier的区别

    之所以把Latch与Barrier放在一起比较是因为他们给人一种相似的感觉. 他们都是阻塞一些行为直至某个事件发生,但Latch是等待某个事件发生,而Barrier是等待线程. 先比较一下JCIP中对 ...

  7. DataTables获取指定元素的行数据

    法1: 用jquey获取,var row = $('.edit').parent().parent(); 缺点:只能获取dom上的东西,不能获取没有渲染的数据 法2: 首先绑定行号到元素上 $('#e ...

  8. COGS2216 你猜是不是KMP

    第一道自己写的FFT...... 不知为啥这题在网上找不到题解......真是麻烦,害得我推了半天...... 还是写个简要题解吧...... 首先把S和T拆成序列,a~z分别对应成1~26,?是0, ...

  9. arcMap 进度条

    private void kk() { IProgressDialogFactory progressDialogFactory = new ProgressDialogFactoryClass(); ...

  10. unity3d代码优化标准

    转载自:https://blog.csdn.net/m0_37283423/article/details/84378384 代码优化 ● 尽可能使用for来代替foreach:每次foreach会产 ...