自从Java 2 SDK 1.3开始,借助于java.util.Timer类能够为企业应用提供任务调度支持。尽管现有的Timer没有Quartz功能丰富,但它能够满足简单的企业应用需求。而且,开发者也不用另外学习Quartz这样一套全新的类库,因为Java
2本身就内置了对Timer的支持。因此,Spring还是针对java.util.Timer提供了org.springframework.scheduling.timer包,以支持基于Timer的任务调度。
为了完成用户任务的开发,开发者提供的任务类必须继承于java.util.TimerTask类。下面摘录了imagedb中提供的ListImagesTimerTask类。用户任务被实现在run()中,此后Timer会依据开发者指定的调度规则重复调用到run()。
public class ListImagesTimerTask extends TimerTask {
......
public void run() {
logger.info("Listing images in image database, scheduled by Timer");
List images = this.imageDatabase.getImages();
......
}
}
在完成TimerTask的开发后,我们可以在WEB-INF/schedulingContext-timer.xml中配置它,相关配置摘录如下。ScheduledTimerTask用于制定调度规则,delay属性表示成功调度timerTask任务后第1次执行这一任务需等待的时间(单位:毫秒),period属性表示任务执行的间隔(单位:毫秒)。
<bean id="listImagesTimerTask"
class="org.springframework.samples.imagedb.scheduling.ListImagesTimerTask">
<property name="imageDatabase" ref="imageDatabase"/>
<property name="mailSender" ref="mailSender"/>
<property name="mailFrom" value="${mail.from}"/>
<property name="mailTo" value="${mail.to}"/>
</bean>
<bean id="listImagesScheduledTask" class="org.springframework.scheduling.timer.
ScheduledTimerTask">
<property name="timerTask" ref="listImagesTimerTask"/>
<property name="delay" value="10000"/>
<property name="period" value="10000"/>
</bean>
另一方面,开发者也可以将普通的POJO类指定为待调度的任务。Spring提供的timer包存在MethodInvokingTimerTaskFactoryBean辅助类,下面展示了它的使用。此时,targetObject属性用于指定目标受管POJO,而targetMethod属性用于指定这一受管POJO中的某个方法。用户任务被实现在checkImages()中,此后Timer会依据开发者指定的调度规则重复调用到checkImages()。MethodInvokingTimerTaskFactoryBean还暴露了targetClass、staticMethod属性,它们用于调用类中的静态方法。
<bean id="checkImagesTimerTask"
class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
<property name="targetObject" ref="imageDatabase"/>
<property name="targetMethod" value="checkImages"/>
</bean>
<bean id="checkImagesScheduledTask" class="org.springframework.scheduling.timer.
ScheduledTimerTask">
<property name="timerTask" ref="checkImagesTimerTask"/>
<property name="delay" value="5000"/>
<property name="period" value="5000"/>
</bean>
在制订上述2条调度规则后,开发者要实施它们,而TimerFactoryBean能够担当此任,示例配置如下。借助scheduledTimerTasks属性,开发者能够指定由若干ScheduledTimerTask构成的集合。
<bean id="timer" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref local="listImagesScheduledTask"/>
<ref local="checkImagesScheduledTask"/>
</list>
</property>
<property name="daemon" value="true"/>
</bean>
同Quartz相比,Timer支持的调度规则非常有限,而且它甚至没有提供内置的线程池。比如,Timer不能够指定类似于“某年某月某日要执行某任务”的调度规则。
分享到:
相关推荐
在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util.Timer`类、`java.util.concurrent.ScheduledExecutorService`,以及更强大的第三方库如Quartz Scheduler和Spring框架中的`@Scheduled`注解等...
在Web应用中,例如在Java Web项目中,我们可以利用Servlet容器的特性或者Spring框架提供的定时任务支持来实现定时任务。 首先,让我们来看看Java内置的定时器`java.util.Timer`。这个类提供了计划在将来某一时刻...
`Spring Timer`是Spring框架提供的一个简单任务调度工具,它基于Java的`java.util.Timer`类。通过`@Scheduled`注解,开发者可以在Spring应用上下文中声明一个方法为定时任务。例如: ```java import org.spring...
`java.util.Timer` 类提供了一个调度任务的方法,而`TimerTask` 是一个抽象类,用于定义要在特定时间执行的任务。以下是如何使用它们的基本示例: ```java import java.util.Timer; import java.util.TimerTask; ...
对于`java.util.Timer`,Spring 提供了`org.springframework.scheduling.timer` 包,可以方便地通过Spring的bean配置来管理和调度Timer任务。而对于Quartz,Spring则提供了`org.springframework.scheduling.quartz` ...
在Java中,我们可以利用内置的`java.util.Timer`类或者Spring框架的`@Scheduled`注解来实现定时任务。 一、Java `java.util.Timer` 类 `java.util.Timer` 类和`TimerTask` 类是Java的标准库提供的定时任务工具。`...
在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring框架的`@Scheduled`注解以及Quartz库。 1. **Java内置的`java.util.Timer`和`TimerTask`**: - `Timer`类用于创建一...
在这种情况下,可以使用`java.util.Timer`类,它提供了一种简单的方式来安排在未来某一时刻执行的任务。然而,Spring框架提供了更高级的集成,使得定时任务的管理更加灵活和强大。 在Spring中使用`Timer`,有两种...
在【标题】"Spring的定时任务开发及对Quartz和Timer支持"中,涉及到的是Spring在处理定时任务方面的特性,这在企业级应用中非常常见,用于执行一些周期性的后台任务,如数据同步、报表生成、清理任务等。 首先,...
在Java编程语言中,`Timer`类和Spring框架的定时任务是两种常见的实现定时执行任务的方式。本篇文章将深入探讨这两个主题,旨在帮助初学者理解它们的工作原理以及如何在实际项目中应用。 首先,让我们来看一下Java...
以上就是关于Java定时任务的一些基本知识点,包括`java.util.Timer`、`ScheduledExecutorService`以及Spring框架下的定时任务实现方式。了解这些内容后,你可以根据项目需求灵活地创建和管理定时任务。
总结一下,Java中实现定时任务主要依靠`java.util.Timer`、`java.util.concurrent.ScheduledExecutorService`等原生API,以及一些第三方库如Quartz。在实际开发中,选择合适的定时任务解决方案需要考虑项目的复杂性...
首先,Java内置了`java.util.Timer`和`java.util.TimerTask`类,它们提供了基本的定时任务功能。`Timer`类用于创建一个定时器,而`TimerTask`是可调度的任务类,继承自它即可定义需要定时执行的任务。以下是一个简单...
在Java中,`java.util.Timer` 类是用于调度任务的类,它可以在特定的时间点或者按照设定的周期执行某项任务。`Timer` 类提供了两种计划任务的方法:`schedule(TimerTask task, long delay)` 和 `scheduleAtFixedRate...
首先,Java标准库提供了一个名为`java.util.Timer`和`java.util.TimerTask`的类,它们可以用来创建简单的定时任务。`Timer`类用于调度任务,而`TimerTask`是实际的任务对象。下面是一个简单的例子: ```java import...
本文将详细介绍Java中三种常见的定时任务实现方式:`java.util.Timer`、`ServletContextListener`以及Spring框架中的`ScheduledTimerTask`。 1. **java.util.Timer** `java.util.Timer`类是最基础的定时任务工具,...
在JDK 1.3及以后的版本中,`java.util.Timer`类提供了基础的定时任务支持。不过,`Timer`类的功能相对有限,无法精确地在特定时间点执行任务,比如设置每天特定时间执行的任务。 Quartz是一个强大且灵活的开源作业...
首先,Java提供了一个内置的定时框架——`java.util.Timer`类和`TimerTask`类,它们可以用来创建简单的定时任务。`Timer`类用于调度任务,而`TimerTask`是执行的任务对象。以下是一个简单的示例: ```java import ...
在Java中,`java.util.Timer`类提供了调度定时任务的功能,而`java.util.TimerTask`则是执行这些任务的具体载体。两者结合,可以灵活地安排任务的执行时间、频率以及执行条件。 #### TimerTask类 `TimerTask`是一...
Spring 框架提供了多种方式来实现定时任务,其中一种常见的做法是利用 `java.util.Timer` 类来实现基本的定时任务功能。此外,对于更复杂的场景,通常会推荐使用 Quartz 这样的第三方库。 ##### Java.util.Timer `...