Spring3 Shedule Task之注解实现 (两次启动Schedule Task 的解决方案)
在spring3 中的新引入的task 命名空间。可以部分取代 quartz 功能,配置和API更加简单,并且支持注解方式。但是如果需要使用比较复杂的任务调度。还是建议使用quartz。
第一步:
在Spring的相关配置文件中(applicationContext.xml或者是{project_name}_servelt.xml或者是独立的配置文件如XXX_quartz.xml)中配置并开启Spring Schedule Task.注意其中高亮的部分是必须的。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd
">
<mvc:annotation-driven />
<context:component-scan base-package="com.mytools.validator.engine" />
<!-- 启动定时器 -->
<task:annotation-driven/>
</beans>
第二步:
可以在类中的需要定时执行的方法下指定如下Annotation
@Scheduled(cron="0 33/3 * * * ?") //每小时的33分钟开始执行,每3分钟执行1次
public void start() throws ServletException {
validate();
}
备注:其实@Scheduled中可以指定如下3中时间表达式:
(1)fixedRate:每隔多少毫秒执行一次该方法。如:
@Scheduled(fixedRate=2000) // 每隔2秒执行一次
public void scheduleMethod(){
System.out.println("Hello world...");
}
(2)fixedDelay:当一次方法执行完毕之后,延迟多少毫秒再执行该方法。
(3)cron:详细配置了该方法在什么时候执行。cron值是一个cron表达式。如:
@Scheduled(cron="0 0 0 * * SAT")
public voidarchiveOldSpittles() {
// ...
}
到指定时间后,任务总是执行2次的解决方案:
这是因为我们很容易在一个基于Spring的Web工程中启动2个定时线程:
第一次:web容器启动的时候,读取applicationContext.xml(或者别的Spring核心配置文件)文件时,会加载一次。
第二次:Spring本身会加载applicationContext.xml(或者别的Spring核心配置文件)一次。
解决方案:将你的Task的相关配置独立出来并在web.xml中通过context-param加载。而不是通过spring加载。
1) 独立出Spring-Task,如新命名一个文件名叫cms_quartz.xml
2) 在web.xml中去加载该文件:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/cms-servlet.xml,classpath:cms-quartz.xml</param-value>
<context-param>
相关推荐
本实例代码是基于Spring MVC实现的Task定时任务,旨在提供一个基础模板,便于开发者根据自身需求进行扩展。 1. **Spring MVC Task介绍** Spring MVC中的Task调度是通过`@Scheduled`注解和`TaskScheduler`接口来...
14. **@Scheduled(cron="")**: 这是Spring提供的定时任务注解,允许开发者使用cron表达式定义任务执行计划。 以上就是Spring MVC中的一些主要注解及其用途,掌握这些知识可以帮助开发者更加高效地利用Spring MVC...
在Spring中,也可以使用`@Scheduled`注解配合`TaskScheduler`或`ThreadPoolTaskScheduler`来实现定时任务。 4. **文件上传下载**: 文件上传通常使用了Spring MVC的`CommonsMultipartResolver`,这是一个多部分...
总结起来,Spring MVC通过`@Scheduled`注解结合`TaskScheduler`,使得在Java应用中设置定时任务变得简单且易于管理。开发者可以根据需求选择合适的执行策略,如固定间隔或cron表达式,以满足各种定时场景。同时,...
本篇文章将详细讲解两种在Spring MVC框架中实现定时任务的方法:Spring MVC自带的定时器以及Quartz与Spring的集成。 首先,我们来看看Spring MVC自带的定时任务。Spring MVC作为Spring框架的一个模块,主要处理HTTP...
在Spring MVC框架中实现定时任务是一项常见的需求,特别是在企业级应用中,往往需要根据特定时间进行数据处理、报表生成或发送通知等操作。本篇将详细介绍如何在Spring MVC中配置和使用定时任务,并结合数据库中设置...
但是,在 Spring MVC 中,我们通常会使用 `@Scheduled` 注解来简化定时任务的配置。 **创建定时任务** 1. **定义定时任务类**:创建一个包含 `@Component` 注解的类,这样 Spring 可以将它纳入管理。然后在需要...
使用@Scheduled注解,我们可以轻松地定义周期性的任务,例如发送邮件、数据同步或者定期清理缓存。这使得开发者可以专注于业务逻辑,而无需关心底层的调度机制。 总的来说,Spring 2.0的学习涵盖了核心的框架概念、...
Spring提供了一个名为`@Scheduled`的注解,可以方便地将方法标记为定时任务。 1. **使用@Scheduled** - 首先,我们需要配置一个`TaskScheduler`或`ScheduledExecutorService`,并在Spring配置文件中声明。 - 然后...
总的来说,Spring MVC的定时任务实现需要整合多个组件,其中`slf4j`和`log4j`负责日志记录,而Spring Task提供任务调度能力。理解并正确配置这些组件,能够帮助开发者构建出高效且可维护的定时任务系统。在实际项目...
在 Spring MVC 中,定时任务(Task)的实现主要依赖于 Spring 的 Task 模块,它提供了一种灵活的方式来执行定时任务。Spring Task 提供了两种主要的方式来创建和管理定时任务:基于 XML 配置和基于注解的方式。 1. ...
在Spring框架中,定时任务和线程池是两个非常重要的组件,它们可以帮助我们实现高效的后台任务处理。这篇博文“Spring基于线程池的定时任务线程异常实践”深入探讨了如何在Spring中结合线程池来执行定时任务,并且...
Spring 提供了两种主要的定时任务实现:`@Scheduled` 注解和 `TaskScheduler` 接口。 ### 1. @Scheduled 注解 `@Scheduled` 是一个用于方法级别的注解,它允许我们将任何方法标记为计划任务。例如: ```java ...
`@EnableScheduling`注解会启动一个后台任务调度器,定时扫描方法上的`@Scheduled`注解,执行相应的任务。 接下来,我们需要创建一个用于发送电子邮件的服务类。在Java中,我们可以使用`JavaMailSender`接口来发送...
首先,注解脚本任务是Spring4的一个亮点,它提供了更加简便的方式来处理定时任务。Spring4引入了`@Scheduled`注解,允许开发者直接在方法上声明一个任务的执行周期。例如,你可以使用`@Scheduled(fixedRate = 5000)`...
7. **定时任务**:Spring 提供了 @Scheduled 注解和 TaskScheduler 接口实现定时任务。可以创建一个带有 @Component 的类,使用 @Scheduled 注解的方法来定义周期性任务。 8. **图片上传**:可以使用 Spring MVC 的 ...
标题中的“spring定时器启动两次原因及解决”指的是在Spring框架中使用了定时任务功能,如Spring Boot的`@Scheduled`注解或者Spring Task模块,但遇到了定时任务被触发执行了两次的问题。这种情况可能是由于配置不当...
本教程将聚焦于Spring的一个实用特性——定时任务,特别是如何利用Spring集成JavaMailSender来实现定时发送邮件。我们将探讨以下知识点: 1. **Spring定时任务(Scheduled Tasks)** Spring通过`@Scheduled`注解和`...
在IT行业中,构建一个基于Spring MVC、Spring、MySQL和Maven的定时任务系统是一项常见的需求。这个系统通常用于执行周期性的后台操作,如数据同步、报表生成或清理过期数据等。下面将详细讲解如何利用这些技术实现...
新手可以通过这个项目学习如何将Spring MVC和MyBatis整合,理解它们如何协同工作,以及如何实现注解驱动的编程,同时还能了解定时任务和拦截器的实现方式。这有助于提升对Java Web开发的整体理解,并掌握实际项目中...