分享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 wanganqi
20  *
21  */
22 public class TimeFlicker {
23
24     private static final Logger logger = LoggerFactory
25             .getLogger(LocatingSourceFilter.class);
26
27     private List<ITimeFlickerHandler> handlers = new ArrayList<ITimeFlickerHandler>();
28
29     /**
30      * 通过配置文件获取要调用的时钟消息处理类
31      *
32      * @return
33      */
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 = LoggerFactory
15             .getLogger(LocatingSourceFilter.class);
16
17     /**
18      * 定时时间到,更新所有电子围栏缓存
19      *
20      * @see ITimeFlickerHandler#handle()
21      */
22     @Override
23     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)

分享Spring Scheduled定时器的用法,布布扣,bubuko.com

时间: 2024-08-01 10:45:04

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

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

WEB项目中需要加入一个定时执行任务,可以使用Quartz来实现,由于项目就一个定时任务,所以想简单点,不用去配置那些Quartz的配置文件,所以就采用了Spring @Scheduled注解来实现了定时任务.在这里做个备注. spring配置文件  xmlns中加入一段: xmlns:task="http://www.springframework.org/schema/task" 然后xsi:schemaLocation多加下面的内容: http://www.springframe

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

一.写在前面 本人前端菜鸟一枚,学习前端不久,学习过程中有很多概念.定义在使用时容易混淆,在此给向我一样刚踏入前端之门的童鞋们归纳一下.今天给大家分享一下js中window与document对象.setInterval与setTimeout定时器的用法与区别.讲得不对的地方,烦请大家指正,还望前辈.大牛多多指教! 二.window对象与document对象的用法和区别 window是全局对象,document是window对象的一个属性它也是一个对象.如图: document对象指的页面这个文档

使用spring @Scheduled注解运行定时任务、

曾经框架使用quartz框架运行定时调度问题. 老大说这配置太麻烦.每一个调度都须要多加在spring的配置中. 能不能降低配置的量从而提高开发效率. 近期看了看spring的 scheduled的使用注解的方式进行调度. 感觉非常方便.起码配置的东西少了非常多. 所以留下来以备忘了. 首先要配置我们的spring.xml xmlns 多加以下的内容. xmlns:task="http://www.springframework.org/schema/task" 然后xsi:schem

Spring @Scheduled

Spring @Scheduled是Spring计划任务的一种很简洁的实现.用来替代Quartz的方案. 要使用此特性,需要Spring3.2以上版本.用法: 1.在xml的配置中,需要加入: http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd" 2.写一个简单例子: import org.springframework.context.

运用spring task定时器发布定时任务

在项目中遇到了需要每天定时执行的任务,查了好多,最终运用Spring Task定时器解决了此问题.实在是太赞了. 首先在spring.xml中确定以下内容: 自动扫描的包,定时器注解 spring.xml确认好以后,开始写定时类和方法(类在被扫描的包下): ok,现在可以执行任务了. 注意内容:类上必须要有组件注释  @Component 定时方法必须要有注释 @Scheduled(cron="* * * * * ?") 定时任务不能有返回值 现在我们需要了解的就是cron表达式了,下

spring @Scheduled 并发执行

spring @Scheduled ,默认基于单线程执行,如果需要基于多线程执行,需要在配置文件中配置如下 <task:scheduler id="scheduler" pool-size="10" /> <task:executor id="executor" keep-alive="7200" pool-size="100-200" queue-capacity="500&q

spring的定时器

spring的定时器 搞了一两个小时,忘了导包Quartz.  下面的博客又没有说,开始报错,后面再外边逛了逛,回来理清思路,导包后就没有报错了. 定时器还是很简单的. com.ovaltech.controller.TaskJob  是一个普普通通的类,可以安静的写自己的方法.当然,<value>0 0 7,12,16 * * ? </value>时间的触发规律还是要贴一贴的. 这是时间的设置规则 org.springframework.scheduling.quartz.Cro

好程序员Java干货分享Spring框架之IOC原理

好程序员Java干货分享Spring框架之IOC原理,前言:Spring框架是我们进行企业级开发的最常用框架,本章我们将了解Spring框架,并学习Spring的IOC特性以及IOC的实现原理:注解和反射. Spring框架简介 Spring是一种轻量级的控制反转(IOC)和面向切面编程(AOP)的容器框架,能够为企业级开发提供一站式服务. Spring的优点有 1.方便解耦,简化开发 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度

Spring的注解@Qualifier用法

Spring的注解@Qualifier用法在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢?根据注入资源的注解不同实现的方式有一点小小的区别 下面上铺垫图 请忽略我的红线 ##在Controller中使用 @Autowired注入时 Qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,添加@Qualifier注解,需要注意的是@Qualifier的参数名称为我们之前定义@Service注解的名称之一. ##