Spring 对Timer的支持的核心是由ScheduledTimerTask和TimerFactoryBean类组成的。 ScheduledTimerTask类是对TimerTask的包装器实现,这样你就可以为这个任务定义触发器信息。使用 TimerFactoryBean类,你可以让Spring使用配置创建触发器,并为一组指定的ScheduledTimerTask bean自动创建Timer实例。
1、自定义timerTask,比如:定时输出ServletContext中的信息,本例中输出项目的绝对路径(比如:D:\software\apache-tomcat-6.0.33\webapps\spring\)
Java代码
public class BirthdayReminderTimerTask extends TimerTask implements ServletContextAware{
/*通过实现ServletContextAware可获得servletContext*/
private ServletContext servletContext;
private static Logger logger = Logger.getLogger(BirthdayReminderTimerTask.class);
@Override
public void run() {
// logger.debug("BirthdayReminderTimerTask is running");
setServletContext(servletContext);
try {
System.out.println(this.servletContext.getRealPath("/"));
} catch (Exception e) {
e.printStackTrace();
}
}
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
}
2、在spring的bean配置文件中配置,当系统加载该文件时,配置的定时器将自动启动,同时被spring管理。
Xml代码
<!--自定义任务-->
<bean id="birthdayReminder" class="com.jep.task.BirthdayReminderTimerTask"></bean>
<!-- ScheduledTimerTask类是对TimerTask的包装器实现,这样你就可以为这个任务定义触发器信息。 -->
<bean id="birthdayReminderTimerTask"
class="org.springframework.scheduling.timer.ScheduledTimerTask">
<!-- 设置启动延迟 -->
<property name="delay">
<value>3000</value>
</property>
<!-- 后续延迟 -->
<property name="period">
<value>5000</value>
</property>
<!-- 指定触发器信息 -->
<property name="timerTask">
<ref local="birthdayReminder" />
</property>
</bean>
<!-- 使用TimerFactoryBean类,你可以让Spring使用配置创建触发器,并为一组指定的ScheduledTimerTask bean自动创建Timer实例。 -->
<bean id="timerFactory"
class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref local="birthdayReminderTimerTask" />
</list>
</property>
</bean>
3、对于web项目,需要在web.xml中进行如下配置
Xml代码
<!-- Spring ApplicationContext配置文件的路径此参数用于后面的Spring-Context loader -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<!--Spring ApplicationContext 载入 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
转自:http://mzjwx.blog.163.com/blog/static/71678833201241044050249/
相关推荐
【标题】:“TimerTask定时执行任务”探讨 在Java编程中,定时任务是常见的需求,例如数据备份、日志清理、任务调度等。`TimerTask`是Java内置的一个定时任务框架,它允许开发者创建和安排周期性或者一次性执行的...
3. **使用TimerTask与Spring集成** 虽然Spring有更强大的定时任务解决方案,但如果你仍然想使用`TimerTask`,可以将其封装到一个Spring Bean中,然后由Spring来管理和调用。以下是一个示例: ```java @Component ...
在IT行业中,定时任务是常见的一种需求,它允许程序在特定时间或按照一定周期自动执行某些操作,比如发送邮件、进行数据统计、更新系统状态、推送消息、开启活动或创建增量索引等。目前,主要有两种方式可以实现定时...
需要注意的是,虽然`TimerTask`和Spring的`ScheduledTimerTask`可以实现定时任务调度,但在实际项目中,Spring的`@Scheduled`注解或Quartz等第三方库通常更为推荐,因为它们提供了更强大的定时任务管理能力,包括更...
本文将深入探讨如何在Spring框架中结合JDK的`TimerTask`来创建和管理定时任务。 ### Spring定时任务简介 Spring提供了`org.springframework.scheduling`包,其中包含用于调度任务的组件。最常用的有两种方式:基于...
通过在方法上添加此注解,Spring的定时任务执行器会自动处理任务调度。这种方法适用于简单任务,且不需Quartz的复杂特性。例如: ```java @Component public class ScheduledTasks { @Scheduled(fixedRate = ...
在Spring框架中,定时任务的实现提供了多种方式,如基于Java Timer API的定时任务和基于Quartz库的定时任务。这两种方法各有优缺点,适用于不同的场景。以下将详细讲解这两种方式。 1. 基于Java Timer API的定时...
### 一、Spring集成的`TimerTask` `TimerTask`是Java内置的定时任务工具,但Spring提供了与之集成的方式,让定时任务的管理更加灵活和方便。以下是如何在Spring中使用`TimerTask`: 1. **创建TimerTask实现类**: ...
- **事务支持**:可以将任务执行与数据库事务相结合,增强数据一致性。 **示例**: ```java JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("job1", "group1") .build(); Trigger trigger = ...
标题中的“spring2.0学习笔记+spring定时任务”表明了这个压缩包文件包含的是关于Spring框架2.0版本的学习...通过学习这些资料,开发者可以更好地掌握Spring框架的定时任务功能,从而在实际项目中灵活地安排任务执行。
### Spring集成Quartz定时任务框架介绍 #### 一、引言 在现代JavaEE应用程序开发过程中,定时任务是一项常见的需求。这些任务可能包括但不限于:每天固定时间生成报表、定期清理缓存、定时发送邮件提醒等。传统的...
Spring提供了灵活的定时任务支持,而Quartz则是一个强大的作业调度框架,可以用来安排复杂的任务执行计划。下面我们将深入探讨如何在Spring中配置定时任务以及如何与Quartz结合。 首先,从给出的`...
Quartz是一个功能强大的任务调度框架,它允许开发者灵活地定义任务执行规则。在Spring中集成Quartz,首先要引入Quartz的jar包,然后在Spring的配置文件中定义任务和调度策略。在示例中,首先创建一个名为`SavaLog`的...
根据提供的文件信息,本文将详细解析Java定时任务与Spring框架集成的相关知识点,包括如何在Spring环境中配置和管理定时任务。 ### Java定时任务简介 在Java中实现定时任务主要有以下几种方式: 1. **Timer和...
System.out.println("定时任务执行"); } } ``` 这里的 `schedule()` 方法签名如下: ```java public void schedule(TimerTask task, long delay) ``` - **`task`**:要执行的任务,必须是一个 `TimerTask` 对象...
但`Timer`有一些限制,比如它不是线程安全的,且只有一个线程执行所有任务,这意味着如果一个任务执行时间过长,其他任务将被阻塞。 以下是一个`Timer`的简单使用示例: ```java TimerTask task = new TimerTask() ...
Spring提供了对Quartz的集成,使得我们可以方便地在Spring应用上下文中配置和管理定时任务。下面将详细解释如何在Spring中整合Quartz以及相关的知识点。 首先,Quartz是一个开源的作业调度框架,它允许开发者定义...
System.out.println("定时任务执行中..."); } } ``` 在Spring配置中启用定时任务扫描和配置线程池: ```xml ``` 这样,Spring就会自动扫描并注册带有`@Scheduled`注解的方法,并根据注解的参数进行调度。 ...
4. 故障恢复:Quartz具有故障恢复和集群支持,如果任务执行失败,它可以重新安排任务执行,而Spring 2.0的`Job`则需要额外的代码来实现类似功能。 总的来说,对于简单的定时任务需求,Spring 2.0的`Job`结合`Task...