当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

Spring3的任务调度示例

发表于: 2012-12-20   作者:dinguangx   来源:转载   浏览次数:
摘要:   软件环境:spring3.1.1     实现目标:测试Spring3的任务调度使用,以及实现任务的暂停与唤醒。 1. Spring3的任务调度 Spring3对任务调度提供了更多的支持,并且提供了新的命名空间task,支持固定时间频率的任务调度和cron表达式。可以替代quartz组件来实现简单的任务调度。本文的目的是要使用

 

软件环境:spring3.1.1

    实现目标:测试Spring3的任务调度使用,以及实现任务的暂停与唤醒

1. Spring3的任务调度

Spring3对任务调度提供了更多的支持,并且提供了新的命名空间task,支持固定时间频率的任务调度和cron表达式。可以替代quartz组件来实现简单的任务调度本文的目的是要使用spring3自带的任务调度机制实现一个简单的任务调度,并且该任务调度中提供了任务的暂停和唤醒功能。

2. 任务类的编写

任务类不必再继承于TimerTask,而可以是一个普通的java类,方法名可以为任意的public方法,如下。

 

public class MyTimerTask {
	private boolean pause = false;

	public void run() {
		synchronized (this) {
			if (pause) {
				try {
					this.wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			} else {
				print();
			}
		}
	}

	private void print() {
		System.out.println(new SimpleDateFormat("hh:mm:ss").format(new Date()) + " : MyTimerTask running...");
	}

	public void pause() {
		synchronized (this) {
			this.pause = true;
		}
	}

	public void wakeup() {
		synchronized (this) {
			this.pause = false;
			this.notifyAll();
		}
	}

}

 
       在该类中,提供了一个run()方法做为任务的实际执行过程,并且提供两个方法pause()wakeup()用来暂停和唤醒任务。

3. 配置文件

在配置文件中使用了task命名空间对任务的调度进行定义,并定义了执行的周期。

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:task="http://www.springframework.org/schema/task">

	<task:scheduler id="messageTaskScheduler" pool-size="5" />

	<task:scheduled-tasks scheduler="messageTaskScheduler">
		<task:scheduled ref="timerTask" method="run"
			fixed-delay="#{3*1000}" />
	</task:scheduled-tasks>
	<bean id="timerTask" class="task.test.MyTimerTask" />

</beans>

 

 

4. 进行任务调度测试

测试类编写如下:

 

@ContextConfiguration(locations="classpath:applicationContext.xml")
public class MyTaskTest extends AbstractJUnit4SpringContextTests {
	@Autowired
	private MyTimerTask timerTask;

	@Test
	public void testTask() throws Exception{
		System.out.println(timerTask);
		Thread.sleep(30 * 1000);
		System.err.println("pause for 20 seconds...");
		timerTask.pause();
		Thread.sleep(20 * 1000);
		System.err.println("wakeup...");
		timerTask.wakeup();
		Thread.sleep(30 * 1000);
	}
}

 
      运行该测试用例,可以在控制台中看到如下输出:

 

10:40:50 : MyTimerTask running...

10:40:53 : MyTimerTask running...

10:40:56 : MyTimerTask running...

10:40:59 : MyTimerTask running...

10:41:02 : MyTimerTask running...

10:41:05 : MyTimerTask running...

10:41:08 : MyTimerTask running...

10:41:11 : MyTimerTask running...

10:41:14 : MyTimerTask running...

10:41:17 : MyTimerTask running...

pause for 20 seconds...

wakeup...

10:41:41 : MyTimerTask running...

10:41:44 : MyTimerTask running...

10:41:47 : MyTimerTask running...

10:41:50 : MyTimerTask running...

10:41:53 : MyTimerTask running...

10:41:56 : MyTimerTask running...

10:41:59 : MyTimerTask running...

10:42:02 : MyTimerTask running...

10:42:05 : MyTimerTask running...

Spring3的任务调度示例

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
发一下牢骚和主题无关: 前段时光做项目,好几个项目都有务任调度的功能。自己也没做过这方面的开辟
Oracle任务调度概述 在Oracle中任务调度指某一执行程序在特定的时间被周期性的执行。Oracle把任务调
21_BasicTaskScheduler基本任务调度器(一)——Live555源码阅读(一)任务调度相关类 BasicTaskSched
这是Live555源码阅读的第二部分,包括了任务调度相关的三个类。任务调度是Live555源码中很重要的部
基于事件的Oracle JOB概述 Oracle的任务调度不仅可以基于时间进行调度,也可以根据事件来触发。关于
这是Live555源码阅读的第二部分,包括了任务调度相关的三个类。任务调度是Live555源码中很重要的部
原文链接 引言 这一小节我们将就之前写的几篇博文,从提交Job,到Stage划分,到任务分发,再到任务
1、任务调度 <a href="http://img.it610.com/image/info2/e1ac0a37825
说到任务调度,大家可能会想到Quartz框架,但是jdk自带的简单任务调度工具类,反而了解的人并不是很
大概是在09年下半年,参与了一个项目,当时项目有一些需要定期执行的任务,并且考虑到后续会有更多
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号