热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

SpringMVCCron定时器Demo常见问题解决方案

这篇文章主要介绍了SpringMVCCron定时器Demo常见问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

该技术的不适用的场景

如果在集群环境下,多台服务器中只希望有一台执行,那 Spring 自带的这种定时器方式可能不太符合你的需要。
但是,如果每台服务器都需要独立执行该定时器任务,且相互之间不存在同步,那么还是可以考虑的

SpringMVC 定时器

本文着重介绍的是 SpringMVC 配置定时器的方式,而不是 SpringBoot 配置定时器的方式。

注解方式

首先,在 Clock 类上添加 @Component,然后,在需要定时执行的方法上面加上 @Scheduled,最后指定 cron 表达式。

项目结构:

Clock.java

package coderead.spring.scheduled;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class Clock {
  // 每5秒钟执行一次
  @Scheduled(cron = "*/5 * * * * ?")
  public void testTime() {
    System.out.println(new Date());
  }
}

spring-mvc.xml

<&#63;xml version="1.0" encoding="UTF-8"&#63;>


  

  
  
  
  

web.xml

<&#63;xml version="1.0" encoding="UTF-8"&#63;>

  
  
    contextConfigLocation
    classpath:spring/spring-mvc.xml
  

  
  
    org.springframework.web.context.ContextLoaderListener
  


  
  
  
    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      
    
    1
  
  
    dispatcherServlet
    /
  

pom.xml

<&#63;xml version="1.0" encoding="UTF-8"&#63;>

  4.0.0

  coderead.spring
  spring-scheduled-test
  1.0-SNAPSHOT
  war


  
    5.1.6.RELEASE
    UTF-8
  

  
    
      org.springframework
      spring-webmvc
      ${spring.version}
    
  

  
    
      
        org.apache.maven.plugins
        maven-compiler-plugin
        3.1
        
          1.8
          1.8
          UTF-8
        
      
      
        org.eclipse.jetty
        jetty-maven-plugin
        9.4.33.v20201020
      
    
  

如果你不知道怎么用 jetty 启动项目,你可以考虑参考 使用maven-Jetty9-plugin插件运行第一个Servlet

xml 配置方式

如果你需要使用 xml 配置,你会发现 @Scheduled 注解和 有着相同的属性。因此我们将上一节的代码稍稍改动一下:

Clock.java 去掉注解

package coderead.spring.scheduled;
import java.util.Date;
public class Clock {
  public void testTime() {
    System.out.println(new Date());
  }
}

spring-mvc.xml

<&#63;xml version="1.0" encoding="UTF-8"&#63;>


  

  

  
  
  
  
    
  

常见问题

@Scheduled 定时任务不生效

@Scheduled定时任务不生效???

  • 此方法不能有参数
  • 此方法不能有返回值
  • 此类中不能包含其他带任何注解的方法(发现新大陆)

还有一种可能就是没有在 spring-mvc.xml 文件中加入 而不仅仅是加入

@Scheduled 定时任务执行两次

@Scheduled Spring定时任务每次执行两次解决方案

主要原因是 web.xml 同时设置了 都设置了 contextConfigLocation,两次加载配置文件


  
    contextConfigLocation
    classpath:spring/spring-mvc.xml
  
  ...
  
    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:spring/spring-mvc.xml
    
    1
  
  ...

cron 表达式

cron 表达式是用来规定代码执行周期的一种表达式,cron表达式详解 这篇文章详细的讲解了 cron 表达式的使用细节。
以我的浅陋的经验,我对 cron 表达式的记忆是:

常用的 cron 表达式由 6 个域组成,域和域之间以空格分开

域从左到右,时间单位从秒开始逐步增大。他们分别是 "秒 分 时 日期 月份 星期"

因为日期和星期会相互影响,通常如果其中一个用 非&#63; 表示任意,则另一个必须用 &#63; 表示“任意”。

原因:通常,在指定日期条件之后,我们虽然希望“任意星期几”,但是实际上,此时星期需要根据日期的变化而相应变化,做不到完全任意。

你还可以通过 在线 Cron 表达式 来帮助你理解前人代码中的 cron 表达式的含义,或者根据你的需求生成一个新的 cron 表达式。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • 项目运行环境配置及可行性分析
    本文介绍了项目运行环境配置的要求,包括Jdk1.8、Tomcat7.0、Mysql、HBuilderX等工具的使用。同时对项目的技术可行性、操作可行性、经济可行性、时间可行性和法律可行性进行了分析。通过对数据库的设计和功能模块的设计,确保系统的完整性和安全性。在系统登录、系统功能模块、管理员功能模块等方面进行了详细的介绍和展示。最后提供了JAVA毕设帮助、指导、源码分享和调试部署的服务。 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
  • 【具体报错信息】ErrorparsingD:\android-sdks\system-images\android-22\android-wear\armeabi-v7a\devi ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ... [详细]
  • 我将SpringMVC升级到Spring3.2.5.我的一些剩余调用即使存在,也会返回无法识别的字段异常.这是错误.Resolvingexceptionfrom ... [详细]
author-avatar
如梦幻般的童心_900
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有