`
Josh_Persistence
  • 浏览: 1645762 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

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>

 

 

 

 

 

2
0
分享到:
评论
1 楼 天天乐van 2016-12-19  
感谢楼主分享

相关推荐

    springboot动态配置定时任务(schedule)

    Spring Boot集成了Spring Framework的TaskExecution和TaskScheduling模块,使得我们可以方便地创建和管理定时任务。本文将深入探讨如何在Spring Boot中实现动态配置定时任务,并实现不重启项目就能开关或重启任务...

    Java应用:Java调度任务和Spring Quartz (2)

    Spring框架提供了对任务调度的强大支持,其中Spring Quartz是一个常用的集成解决方案。本篇将深入探讨如何使用Java和Spring Quartz来配置和调度cron任务。 首先,我们需要理解Spring Quartz的核心组件。`Job`接口...

    spring定时任务(scheduler)的串行、并行执行实现解析

    Spring定时任务(Scheduler)的串行、并行执行实现解析 Spring Framework提供了一个强大的任务调度器(Scheduler),可以用于实现各种类型的定时任务。其中,串行执行和并行执行是两种常见的任务执行模式。本文将...

    Quartz--JAVA定时任务\Java应用:Java调度任务和Spring Quartz (1)

    Java定时任务是应用程序中不可或缺的一部分,它允许程序在特定时间执行特定操作,无需用户干预。...相比`java.util.Timer`,Quartz提供了更丰富的功能和更强的灵活性,是Java定时任务的首选解决方案。

    shedule

    标题 "shedule" 提到的是一个与调度相关的项目,很可能是一个 JavaScript 库或者框架,用于在应用程序中管理和执行定时任务。在 JavaScript 中,调度是非常重要的一环,因为它是基于事件循环的语言,允许开发者通过...

    schedule-react-saga-typesoket:Shedule 应用程序与 redux-saga 和 typeoket React

    在交互式观察模式下启动测试运行器。 有关更多信息,请参阅有关的部分。 yarn build 将用于生产的应用程序构建到build文件夹。 它在生产模式下正确地捆绑了 React 并优化了构建以获得最佳性能。 构建被缩小,...

    计划生成器导出「Schedule Builder Export」-crx插件

    此扩展程序允许从UC Davis Schedule Builder导出到Google日历。 该扩展程序将“导出”按钮插入到Schedule Builder网页中。完成时间表后,点击导出按钮会将时间表导入Google日历。请阅读...

    shedule_skill:Yandex Alice技能

    在"shedule_skill-master"压缩包中,很可能包含了实现这个技能的所有源代码和相关资源。 首先,Python在构建Alice技能时的角色可能包括以下几个方面: 1. **自然语言处理(NLP)**:Python中的库如spaCy、NLTK或...

    HomeAssistant_irrigation_mqtt_schedule:在不同的mqtt主题中以json格式创建灌溉计划

    基于websocket api和MQTT服务的HomeAssistant灌溉系统在不同的mqtt主题中以json格式创建灌溉计划。 当您单击网页中的发布时,它会通过websocket api... shedule2 max : 255 shedule3 : name : shedule3 max : 255 shedu

    grsu-shedule-parser

    grsu-shedule-解析器 使用超级简单 该模块旨在解析 GRSU 计划页面。 数据- 是一个带有时间表的 html 页面,解析数据- 准备好的每周时间表。 var SheduleParse = require ( 'grsu-shedule-parser' ) ; SheduleParse...

    Shedule maker for Musical schools-开源

    综合来看,这个开源项目提供了一整套解决方案,帮助音乐学校有效地管理教学日程,同时鼓励社区参与,推动软件的不断优化。开源的特性使得这款日程管理工具能够适应多样化的环境,满足不同规模和类型的音乐教育机构的...

    Practice_GitHub_Action-ScheduleViaCron::check_mark_button:示例存储库,以查看“ on.schedule”工作流如何在GitHub Actions上工作

    计划GitHub动作的实践(如何使用cron触发动作) 示例回购,以了解“ on.schedule”工作流程在GitHub Actions中如何工作。 以下安排好的工作流程在添加了评论。 请参阅的评论中的实际工作流程。

    matlab说话代码-Light_Schedule:用于水生植物生长系统的光继电器,由俄勒冈州波特兰市的每日日出和日落时间控制

    matlab说话代码时间表 用于水生植物生长系统的光继电器,由俄勒冈州波特兰市的每日日出和日落时间控制。 我们使用MATLAB代码从网站上读取每天的日出和日落时间(特别是对于波特兰或OR数据:)。...

    keytimerotator:从键数组中获取下一个键,并按时间限制

    关键时间旋转器 从带有期限限制请求的键数组中获取有效的键 用法 var Keytimerotator = require ( 'keytimerotator' ) ; var schedule = "0 * * * * *" ;... //after shedule get key from begin keys 安装 npm install

    批处理系统的作业调度模拟

    在提供的代码中,`shedule()` 函数实现了 HRN 算法。该函数首先遍历整个作业链表,对于每一个符合条件的作业(即作业所需的资源不超过当前可用资源),计算其响应比,并记录下最高的响应比及其对应的作业。一旦找到...

    js关闭子窗体刷新父窗体实现方法

    本文将详细介绍如何通过JavaScript实现关闭子窗体并刷新父窗体的多种方法。 首先,我们要理解JavaScript中的几个关键对象和属性。window对象代表了浏览器中打开的一个窗口,每个window对象都拥有一个opener属性,该...

    操作系统作业调度算法-短作业(C++)

    代码中的`shedule()`函数实现了SJF算法的核心逻辑。它遍历作业链表,寻找当前可以执行的最短作业。如果找到符合条件的作业,则从链表中移除该作业,并更新系统资源(如内存、磁带驱动器和打印机的数量)。这一过程会...

    操作系统实验报告(全)

    3. 分析响应比高者优先算法,该算法首先计算每个作业的响应比,它是等待时间与运行时间的比值,然后选择响应比最高的作业进行处理。 4. 编写C语言程序实现这个算法,程序包括一个作业调度函数,该函数会遍历作业队列...

    连接媒体服务器配置.pdf

    本文档主要介绍的是如何配置ArKaos MediaMaster 3.2.1与媒体服务器的连接,以便实现对视频层的控制。ArKaos MediaMaster是一款专业级别的媒体服务器控制软件,常用于舞台灯光、视觉效果的控制。以下是详细的配置步骤...

Global site tag (gtag.js) - Google Analytics