基本概念
任务(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`是Spring框架提供的一个简单任务调度工具,它基于Java的`java.util.Timer`类。通过`@Scheduled`注解,开发者可以在Spring应用上下文中声明一个方法为定时任务。例如: ```java import org.spring...
总结来说,Spring的任务调度通过集成JDK的Timer或更高级的Quartz库,为开发者提供了灵活且强大的后台任务执行能力。无论是简单的定时任务还是复杂的调度需求,都能得到很好的满足。在设计和实现任务调度时,需要注意...
// 使用JDK的Timer调度任务 } } ``` ### 触发策略 在Spring中,你可以通过`Trigger`来决定任务何时触发。虽然Spring不直接支持`TimerTask`的触发,但可以自定义一个`Trigger`实现来模拟`TimerTask`的行为。 ```...
使用JDK定时器的基本步骤包括创建`Timer`对象,然后使用`schedule(TimerTask task, long delay)`或`schedule(TimerTask task, Date firstTime, long period)`方法来安排任务。`TimerTask`是可重用的异步任务,你需要...
【Spring 3.0作业调度】是Spring框架中的一个重要组件,它允许开发者在特定时间点或按照预定的周期执行任务,极大地增强了应用的自动化能力。本文将深入探讨Spring 3.0中的作业调度机制,包括其重要性、基本概念、...
总的来说,Spring的任务调度功能为开发者提供了强大的定时任务解决方案,无论是简单的JDK Timer还是复杂的Quartz,都能满足不同的需求。通过学习相关的源码和实践,我们可以更好地理解和利用这些工具,提升应用的...
在Spring中,使用JDK的Timer类库来做任务调度功能不是很方便,关键它不可以象cron服务那样可以指定具体年、月、日、时和分的时间。你只能将时间通过换算成微秒后传给它。如任务是每天执行一次,则需要在spring中如下...
在JDK 1.3及以后的版本中,`java.util.Timer`类提供了基础的定时任务支持。不过,`Timer`类的功能相对有限,无法精确地在特定时间点执行任务,比如设置每天特定时间执行的任务。 Quartz是一个强大且灵活的开源作业...
要将Timer集成到Spring中,可以通过`@Scheduled`注解定义任务,并在配置文件中启用定时任务调度。 4、在Spring中使用Quartz调度器 对于更复杂的排程需求,Spring支持与Quartz库集成。Quartz是一个强大且灵活的开源...
Spring 框架提供了对定时调度服务的内置支持类,支持从 JDK 1.3 开始内置的 Timer 类和 Quartz Scheduler。开发者可以通过 FactoryBean,分别指向 Timer 或 Trigger 实例的引用进行配置。同时,Spring 还包含有用于...
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。...Quartz在功能上远远超越了JDK自带的Timer,很好很强大!
Spring提供了多种任务调度方案,其中包括对JDK内置的Timer的支持以及与流行的任务调度库Quartz的集成。 任务调度简介: 在软件开发中,任务调度是用于自动化执行特定任务的重要机制。这些任务通常包括但不限于数据...
使用Timer的schedule()方法可以实现一次性调度。 4. 循环调度:循环调度是指在特定时间间隔执行任务。使用Timer的schedule()方法可以实现循环调度。 5. schedule()和scheduleAtFixedRate()的区别:schedule()方法...
它允许开发者在应用中安排周期性任务的执行,无需直接依赖底层的调度实现,如 Quartz 或者 JDK 的 Timer。接下来,我们将深入探讨Spring定时器的相关知识点。 一、Spring定时器基础 1. **TaskExecutor接口**:这是...
Spring框架提供了多种方式来实现定时任务,其中之一就是整合JDK自带的`TimerTask`。本文将详细介绍如何在Spring中使用`TimerTask`实现定时任务调度。 首先,`TimerTask`是Java标准库中的一个类,它实现了`Runnable`...
Timer类用于调度执行任务,而TimerTask类则是任务的抽象类。可以继承TimerTask类来实现自己的定时任务。 在示例代码中,我们定义了一个定时任务类TimmerTest,它继承了TimerTask类。在run方法中,我们输出当前时间...
2. `spring-context-support.jar`: 提供对任务调度的支持,包括 Quartz 和 JDK 的 Timer。 3. `spring-aop.jar`: 实现 AOP 功能,可以用来定义切面和通知,适用于事务管理等。 4. `quartz.jar`: Quartz 框架的核心库...
Spring Boot 支持多种任务调度框架,包括 JDK 内置的 Timer、ScheduledThreadPoolExecutor,以及更强大的 Spring Task 和 Quartz。每个框架都有其适用的场景: - Timer 和 ScheduledThreadPoolExecutor 更适合简单...
第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。 第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。 第15章:对...