`
wuhaidong
  • 浏览: 357712 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

spring任务调度方法☞JDK Timer

阅读更多

 基本概念

任务(job):需要被调度以指定的时间间隔运行的任务单元

触发器(trigger):引发任务运行的条件

调度计划(schedule):一个任务和用来管理这个任务的一组触发器的集合

 

通常一个任务在他的调度计划中只有一个触发器,所以触发器和调度计划这两个概念通常可以互换。

 

spring的两种任务调度方法

1.JDK Timer JVM1.3版本后提供的任务调度能力,不需要依赖spring 以外的产品。

优点:被包含在java中,不需要外部依赖库,当受限于程序大小或公司政策时可以使用。

不足:在定义一个调度计划时只能够提供有限的灵活性。

2.Quartz提供很大的灵活性,允许定义类似于真实世界中的触发器。

 

JDK Timer

1.Timer触发器类型

一次性触发器(one - off)

重复固定延迟触发器(fixed - delay)

重复定时触发器(fixed - rated)

注意:

一次性触发器只能执行一次,执行完成后,不能被再度重新使用;

下面举例说明固定延迟触发器和定时触发器区别:

假设17:00开始执行任务,任务执行时间为30分钟,每小时执行一次,第一次运行将于17:30结束。如果采用固定延迟触发器,第二次运行将在18:30 开始计算方法为前一次结束时间;如果采用定时触发器,第二次运行将在18:00开始,计算方法为前一次开始时间加上间隔时间。

 

 

package org.cric.util;

import java.util.TimerTask;

public class HelloTask extends TimerTask {
	
	public void run() {
		
		System.out.println("Hello");
	}
}
 

 

package org.cric.util;

import java.util.Calendar;
import java.util.Timer;

public class SchedulingTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Timer t = new Timer();
		//一次性触发器,1000毫秒开始运行
		t.schedule(new HelloTask(), 1000);
		//固定时间调用
		Calendar calendar = Calendar.getInstance();
		calendar.set(2010, Calendar.NOVEMBER, 24, 16, 55, 00);
		t.schedule(new HelloTask(), calendar.getTime());
		//调用重复任务,固定延迟触发器
		t.schedule(new HelloTask(), 1000, 3000);
		//定时触发器
		t.scheduleAtFixedRate(new HelloTask(), 1000, 1000);
	}

}

 

spring对JDK Timer调度的支持

目的:许多任务需要配置数据,采用spring管理,使得程序易于配置。

触发器信息是编码到程序里的,意味着对任务触发时间的修改都要修改程序并重新编译。

调度新任务或移除任务都需要修改程序代码,这可以通过spring来配置

 

核心类:

 

ScheduleTimerTask:扮演着TimerTask的包装器实现,允许你为这个任务定义触发器信息。

TimerFactoryBean:让spring使用配置创建触发器,为一组指定的scheduledTimerTask bean自动创建Timer实例。

 

 

 

<?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 ">
	<bean id="helloTask" class="org.cric.util.HelloTask"/>
	<!-- 包装目标任务-->
	<bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
		<!-- 确定任务调度的延迟时间(毫秒) -->
		<property name="delay" value="1000"/>
		<!-- 确定任务调度的间隔时间(毫秒) -->
		<property name="period" value="2000"/>
		<!-- 确定任务调度的目标任务 -->
		<property name="timerTask" ref="helloTask"/>
	</bean>
	<!-- 配置启动调度-->
	<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
		<!-- 需要启动的任务,该任务已具备调度属性-->
		<property name="scheduledTimerTasks">
			<list>
				<!-- list列出所有需要调度的任务 -->
				<ref bean="scheduledTask"/>
			</list>
		</property>
	</bean>
</beans>
 

 

分享到:
评论

相关推荐

    spring timer、quartz俩种任务调度

    `Spring Timer`是Spring框架提供的一个简单任务调度工具,它基于Java的`java.util.Timer`类。通过`@Scheduled`注解,开发者可以在Spring应用上下文中声明一个方法为定时任务。例如: ```java import org.spring...

    Spring 任务调度

    总结来说,Spring的任务调度通过集成JDK的Timer或更高级的Quartz库,为开发者提供了灵活且强大的后台任务执行能力。无论是简单的定时任务还是复杂的调度需求,都能得到很好的满足。在设计和实现任务调度时,需要注意...

    spring + jdk TimerTask定时器

    // 使用JDK的Timer调度任务 } } ``` ### 触发策略 在Spring中,你可以通过`Trigger`来决定任务何时触发。虽然Spring不直接支持`TimerTask`的触发,但可以自定义一个`Trigger`实现来模拟`TimerTask`的行为。 ```...

    spring+jdk定时器

    使用JDK定时器的基本步骤包括创建`Timer`对象,然后使用`schedule(TimerTask task, long delay)`或`schedule(TimerTask task, Date firstTime, long period)`方法来安排任务。`TimerTask`是可重用的异步任务,你需要...

    Spring3.0作业调度

    【Spring 3.0作业调度】是Spring框架中的一个重要组件,它允许开发者在特定时间点或按照预定的周期执行任务,极大地增强了应用的自动化能力。本文将深入探讨Spring 3.0中的作业调度机制,包括其重要性、基本概念、...

    spring2 计划任务

    总的来说,Spring的任务调度功能为开发者提供了强大的定时任务解决方案,无论是简单的JDK Timer还是复杂的Quartz,都能满足不同的需求。通过学习相关的源码和实践,我们可以更好地理解和利用这些工具,提升应用的...

    spring中的任务调度器

    在Spring中,使用JDK的Timer类库来做任务调度功能不是很方便,关键它不可以象cron服务那样可以指定具体年、月、日、时和分的时间。你只能将时间通过换算成微秒后传给它。如任务是每天执行一次,则需要在spring中如下...

    Quartz--JAVA定时任务\Java应用:Java调度任务和Spring Quartz (1)

    在JDK 1.3及以后的版本中,`java.util.Timer`类提供了基础的定时任务支持。不过,`Timer`类的功能相对有限,无法精确地在特定时间点执行任务,比如设置每天特定时间执行的任务。 Quartz是一个强大且灵活的开源作业...

    Spring排程(Scheduling)技术

    要将Timer集成到Spring中,可以通过`@Scheduled`注解定义任务,并在配置文件中启用定时任务调度。 4、在Spring中使用Quartz调度器 对于更复杂的排程需求,Spring支持与Quartz库集成。Quartz是一个强大且灵活的开源...

    spring 定时任务配置详解

    Spring 框架提供了对定时调度服务的内置支持类,支持从 JDK 1.3 开始内置的 Timer 类和 Quartz Scheduler。开发者可以通过 FactoryBean,分别指向 Timer 或 Trigger 实例的引用进行配置。同时,Spring 还包含有用于...

    任务调度开源框架Quartz动态添加、修改和删除定时任务

    Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。...Quartz在功能上远远超越了JDK自带的Timer,很好很强大!

    spring定时计划讲义

    Spring提供了多种任务调度方案,其中包括对JDK内置的Timer的支持以及与流行的任务调度库Quartz的集成。 任务调度简介: 在软件开发中,任务调度是用于自动化执行特定任务的重要机制。这些任务通常包括但不限于数据...

    深入理解Java定时调度(Timer)机制

    使用Timer的schedule()方法可以实现一次性调度。 4. 循环调度:循环调度是指在特定时间间隔执行任务。使用Timer的schedule()方法可以实现循环调度。 5. schedule()和scheduleAtFixedRate()的区别:schedule()方法...

    spring定时器相关资料

    它允许开发者在应用中安排周期性任务的执行,无需直接依赖底层的调度实现,如 Quartz 或者 JDK 的 Timer。接下来,我们将深入探讨Spring定时器的相关知识点。 一、Spring定时器基础 1. **TaskExecutor接口**:这是...

    Spring整合TimerTask实现定时任务调度

    Spring框架提供了多种方式来实现定时任务,其中之一就是整合JDK自带的`TimerTask`。本文将详细介绍如何在Spring中使用`TimerTask`实现定时任务调度。 首先,`TimerTask`是Java标准库中的一个类,它实现了`Runnable`...

    Spring监听器及定时任务实现方法详解

    Timer类用于调度执行任务,而TimerTask类则是任务的抽象类。可以继承TimerTask类来实现自己的定时任务。 在示例代码中,我们定义了一个定时任务类TimmerTest,它继承了TimerTask类。在run方法中,我们输出当前时间...

    spring quartz相关jar包(多版本)

    2. `spring-context-support.jar`: 提供对任务调度的支持,包括 Quartz 和 JDK 的 Timer。 3. `spring-aop.jar`: 实现 AOP 功能,可以用来定义切面和通知,适用于事务管理等。 4. `quartz.jar`: Quartz 框架的核心库...

    SpringBoot官方支持任务调度框架,轻量级用起来也挺香!.doc

    Spring Boot 支持多种任务调度框架,包括 JDK 内置的 Timer、ScheduledThreadPoolExecutor,以及更强大的 Spring Task 和 Quartz。每个框架都有其适用的场景: - Timer 和 ScheduledThreadPoolExecutor 更适合简单...

    Spring+3.x企业应用开发实战光盘源码(全)

     第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。  第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。  第15章:对...

Global site tag (gtag.js) - Google Analytics