`

spring mvc @Scheduled注解实现后台定时操作

 
阅读更多

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>

 

 

 

分享到:
评论

相关推荐

    springMVC定时任务task方式实例代码

    本实例代码是基于Spring MVC实现的Task定时任务,旨在提供一个基础模板,便于开发者根据自身需求进行扩展。 1. **Spring MVC Task介绍** Spring MVC中的Task调度是通过`@Scheduled`注解和`TaskScheduler`接口来...

    spring_mvc注解总结

    14. **@Scheduled(cron="")**: 这是Spring提供的定时任务注解,允许开发者使用cron表达式定义任务执行计划。 以上就是Spring MVC中的一些主要注解及其用途,掌握这些知识可以帮助开发者更加高效地利用Spring MVC...

    Spring MVC示例

    在Spring中,也可以使用`@Scheduled`注解配合`TaskScheduler`或`ThreadPoolTaskScheduler`来实现定时任务。 4. **文件上传下载**: 文件上传通常使用了Spring MVC的`CommonsMultipartResolver`,这是一个多部分...

    Springmvc java注解设置定时任务实例

    总结起来,Spring MVC通过`@Scheduled`注解结合`TaskScheduler`,使得在Java应用中设置定时任务变得简单且易于管理。开发者可以根据需求选择合适的执行策略,如固定间隔或cron表达式,以满足各种定时场景。同时,...

    定时器的配置文件(两种方式:springmvc自带定时,Quartz与spring结合的定时)

    本篇文章将详细讲解两种在Spring MVC框架中实现定时任务的方法:Spring MVC自带的定时器以及Quartz与Spring的集成。 首先,我们来看看Spring MVC自带的定时任务。Spring MVC作为Spring框架的一个模块,主要处理HTTP...

    spring mvc 定时

    在Spring MVC框架中实现定时任务是一项常见的需求,特别是在企业级应用中,往往需要根据特定时间进行数据处理、报表生成或发送通知等操作。本篇将详细介绍如何在Spring MVC中配置和使用定时任务,并结合数据库中设置...

    spring定时器实现源码

    但是,在 Spring MVC 中,我们通常会使用 `@Scheduled` 注解来简化定时任务的配置。 **创建定时任务** 1. **定义定时任务类**:创建一个包含 `@Component` 注解的类,这样 Spring 可以将它纳入管理。然后在需要...

    spring2.0学习笔记+spring定时任务

    使用@Scheduled注解,我们可以轻松地定义周期性的任务,例如发送邮件、数据同步或者定期清理缓存。这使得开发者可以专注于业务逻辑,而无需关心底层的调度机制。 总的来说,Spring 2.0的学习涵盖了核心的框架概念、...

    Spring3.0 mvc 定时器及多线程任务demo

    Spring提供了一个名为`@Scheduled`的注解,可以方便地将方法标记为定时任务。 1. **使用@Scheduled** - 首先,我们需要配置一个`TaskScheduler`或`ScheduledExecutorService`,并在Spring配置文件中声明。 - 然后...

    spring mvc定时任务需要的所有jar包,包括slf4j、log4j

    总的来说,Spring MVC的定时任务实现需要整合多个组件,其中`slf4j`和`log4j`负责日志记录,而Spring Task提供任务调度能力。理解并正确配置这些组件,能够帮助开发者构建出高效且可维护的定时任务系统。在实际项目...

    springmvc+task

    在 Spring MVC 中,定时任务(Task)的实现主要依赖于 Spring 的 Task 模块,它提供了一种灵活的方式来执行定时任务。Spring Task 提供了两种主要的方式来创建和管理定时任务:基于 XML 配置和基于注解的方式。 1. ...

    Spring基于线程池的定时任务线挰异常实践

    在Spring框架中,定时任务和线程池是两个非常重要的组件,它们可以帮助我们实现高效的后台任务处理。这篇博文“Spring基于线程池的定时任务线程异常实践”深入探讨了如何在Spring中结合线程池来执行定时任务,并且...

    spib-mvc框架,内含定时器配置用法

    Spring 提供了两种主要的定时任务实现:`@Scheduled` 注解和 `TaskScheduler` 接口。 ### 1. @Scheduled 注解 `@Scheduled` 是一个用于方法级别的注解,它允许我们将任何方法标记为计划任务。例如: ```java ...

    利用Spring定时发送email

    `@EnableScheduling`注解会启动一个后台任务调度器,定时扫描方法上的`@Scheduled`注解,执行相应的任务。 接下来,我们需要创建一个用于发送电子邮件的服务类。在Java中,我们可以使用`JavaMailSender`接口来发送...

    Spring4新特性(8)注解脚本任务MVC等其他特性改进

    首先,注解脚本任务是Spring4的一个亮点,它提供了更加简便的方式来处理定时任务。Spring4引入了`@Scheduled`注解,允许开发者直接在方法上声明一个任务的执行周期。例如,你可以使用`@Scheduled(fixedRate = 5000)`...

    springMvc+MyBatis整合源码

    7. **定时任务**:Spring 提供了 @Scheduled 注解和 TaskScheduler 接口实现定时任务。可以创建一个带有 @Component 的类,使用 @Scheduled 注解的方法来定义周期性任务。 8. **图片上传**:可以使用 Spring MVC 的 ...

    spring定时器启动两次原因及解决

    标题中的“spring定时器启动两次原因及解决”指的是在Spring框架中使用了定时任务功能,如Spring Boot的`@Scheduled`注解或者Spring Task模块,但遇到了定时任务被触发执行了两次的问题。这种情况可能是由于配置不当...

    手把手教你 ,spring定时发送邮件

    本教程将聚焦于Spring的一个实用特性——定时任务,特别是如何利用Spring集成JavaMailSender来实现定时发送邮件。我们将探讨以下知识点: 1. **Spring定时任务(Scheduled Tasks)** Spring通过`@Scheduled`注解和`...

    springmvc+spring+mysql+maven定时任务

    在IT行业中,构建一个基于Spring MVC、Spring、MySQL和Maven的定时任务系统是一项常见的需求。这个系统通常用于执行周期性的后台操作,如数据同步、报表生成或清理过期数据等。下面将详细讲解如何利用这些技术实现...

    springmvcMybatis

    新手可以通过这个项目学习如何将Spring MVC和MyBatis整合,理解它们如何协同工作,以及如何实现注解驱动的编程,同时还能了解定时任务和拦截器的实现方式。这有助于提升对Java Web开发的整体理解,并掌握实际项目中...

Global site tag (gtag.js) - Google Analytics