Spring任务调度之Timer

一、分类

  • 由于现在大部分的系统都是采用了spring,所以所有的例子都结合spring来构建,目前主要的任务调度分为三种:
  1. Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。
  2. 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂。
  3. Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。

二、Java自带的java.util.Timer类

   1.构建线程类

public class MyTask {
	private String name;

	public void run() {
		System.out.println("Run task: " + name + ".");
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

   2.创建spring的配置文件,spring.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
       default-lazy-init="true">

	<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean" lazy-init="false">
		<property name="scheduledTimerTasks">
			<list>
				<ref local="scheduledTask1"/>
			</list>
		</property>
	</bean>

	<bean id="scheduledTask1" class="org.springframework.scheduling.timer.ScheduledTimerTask">
		<property name="delay" value="0" />
		<property name="period" value="10000" />
		<property name="timerTask">
			<ref bean="methodInvokingTask1"/>
		</property>
	</bean>

	<bean id="methodInvokingTask1" class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
		<property name="targetObject" ref="myTask1"/>
		<property name="targetMethod" value="run"/>
	</bean>

	<bean id="myTask1" class="org.garbagecan.springstudy.schedule.timer.MyTask">
		<property name="name" value="task1"/>
	</bean>
</beans>

三、调度说明

1. 定义了一个tasktask1
     2. 利用spring提供的MethodInvokingTimerTaskFactoryBean类来实现来实现对对task类和方法的声明,声明目标对象和方法,从而使spring知道要运行那个类的那个方法。
     3. 利用ScheduledTimerTask类来配置每个task的启动时间延时,每次启动之间的间隔,当然还有最重要的是需要运行那个对象,这里使用的上面提到的MethodInvokingTimerTaskFactoryBean类           的实例。

4. 最后定义了一个TimerFactoryBean类,并且把ScheduledTimerTask类的实例作为需要调度task

四、测试类

package org.garbagecan.springstudy.schedule.timer;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
	public static void main(String[] args) throws Exception {
		new ClassPathXmlApplicationContext("/org/garbagecan/springstudy/schedule/timer/spring.xml");
	}
}

运行Test类,可以看到task启动,并且使用每10秒作为每次运行之间的时间   

时间: 07-03

Spring任务调度之Timer的相关文章

Spring任务调度之Spring-Task

作者:独具匠心 一.前言 上面两篇介绍了在Spring 中使用Timer与Quartz,本篇将介绍Spring3.0以后自主开发的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种形式,下面将分别介绍这两种方式. 二.第一种:配置文件方式  第一步:编写作业类               即普通的pojo,如下: import org.springframework.stereotyp

Spring任务调度使用

使用方法: 基于XML方式配置调用: 1 任务类实现: package com.demo.schedule; public class ScheduleTask { private int i=0; public void process(){ System.out.println("run to " + i++ + " times"); } } 2 spring配置文件 WebRoot\WEB-INF\applicationContext.xml <?xml

JAVA定时任务调度之Timer入门详解(二)

在上篇的JAVA定时任务调度之Timer入门详解(一)文章中,主要介绍了下Timer,接下来我们一起来看看Timer的一些常用方法. 1.schedule()的4种用法. 第一种:schedule(TimerTask task, Date time); task:安排的任务,time:具体执行时间.这个函数表达的意义是:在时间等于或超过time的时候执行且执行一次task.测试内容如下 MyTimerTask.java的代码跟第一篇一样,MyTimer.java的部分代码截图如下: 运行后,控制

Spring(十)Spring任务调度

一.计划任务 需要定时执行一些计划(定时更新等),这样的计划称之为计划任务 Spring抽象封装了Java提供的Timer与TimerTask类 也可以使用拥有更多任务计划功能的Quartz 二.TimerTask 2.1.继承TimerTask类重写run方法 实现类 package com.pb.task.timertask; import java.util.Iterator; import java.util.List; import java.util.TimerTask; publi

Spring任务调度之Quartz

一.Quartz作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean:java.util.Timer中需要继承自java.util.TimerTask. 作业类即普通的java类,不需要继承自任何基类. 注:推荐使用第二种方式,因为这样所以的类都是普通类,不需要事先区别对待. 从任务调度的触发时机来分,这里主要是针对作业使用的触发器,主要有以下两种:

Spring任务调度器之Task的使用(转)

文章转自 http://blog.csdn.net/l454822901/article/details/51829307 最近发现真的凹凸了,spring升级到3后原来已经自带任务调度器了,之前还一直使用着Quartz.其实也不是Quartz不好,只是相比之下,使用Spring task真的简单很多,无论是理解还是使用. Spring Task提供两种方式进行配置,正如大家所想吧,还是一种是annotation(标注),而另外一种就是XML配置了.但其实这里我觉得比较尴尬,因为任务调度这样的需

任务调度(三)——Timer的替代品ScheduledExecutorService简介

先前的两篇博文<任务调度(一)--jdk自带的Timer>和<任务调度(二)--jdk自带的Timer 动态修改任务执行计划>中,简单介绍了一下Timer,可以实现几本的功能,但是在多线程方面却略显不足. 根据Timer源码,可以看到Timer是单线程的.所以task都是串行执行.假如其中一个task执行需要很长的时间,那其他的task只能干巴巴的等着.怎么办! 现在就遇到了这样的问题.总不能因为这个小小的问题就去换别的任务调度框架吧,还是想用最简单的方案去解决一下.所以Sched

任务调度(三)——Timer的替代品ScheduledExecutorService简单介绍

先前的两篇博文<任务调度(一)--jdk自带的Timer>和<任务调度(二)--jdk自带的Timer 动态改动任务运行计划>中,简介了一下Timer,能够实现几本的功能.可是在多线程方面却略显不足. 依据Timer源代码,能够看到Timer是单线程的. 所以task都是串行运行. 假如当中一个task运行须要非常长的时间,那其它的task仅仅能干巴巴的等着.怎么办! 如今就遇到了这种问题. 总不能由于这个小小的问题就去换别的任务调度框架吧,还是想用最简单的方案去解决一下.所以Sc

Spring任务调度器之Task的使用

Spring Task提供两种方式进行配置,正如大家所想吧,还是一种是annotation(标注),而另外一种就是XML配置了.但其实这里我觉得比较尴尬,因为任务调度这样的需求,通常改动都是比较多的,如果用annotation的方式的话,改动就变得麻烦了,必须去重新编译.所以,我只是选择用XML配置的方式,不过我还是习惯性地启用着标注方式,就如AOP配置那样.annotation方式请自行查找@Scheduled 具体配置参考如下即可 Xml代码   <?xml version="1.0&