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

SpringTask定时任务的配置和使用详解

记录下Spring自带的定时任务用法。 spring中使用定时任务 基于xml配置文件使用定时任务 首先配置spring开启定时任务

记录下Spring自带的定时任务用法。

spring中使用定时任务

基于xml配置文件使用定时任务

首先配置spring开启定时任务

 

    

   

   
     
     
     
   

  
   


定义自己的任务执行逻辑

package com.spring.task; 

/** 
 * 定义任务 
 */ 
public class MyTask { 

  public void show() { 
    System.out.println("show method 1"); 
  } 

  public void print() { 
    System.out.println("print method 1"); 
  } 
}

基于注解使用定时任务

package com.spring.task; 
import org.springframework.scheduling.annotation.Scheduled; 
import org.springframework.stereotype.Component; 

/**
 * 基于注解的定时器 
 */
@Component
public class MyTask2 { 

  /**
   * 定时计算。每天凌晨 01:00 执行一次
   */
  @Scheduled(cron = "0 0 1 * * *")
  public void show() {
    System.out.println("show method 2"); 
  } 

  /**
   * 启动时执行一次,之后每隔2秒执行一次 
   */
  @Scheduled(fixedRate = 1000*2)  
  public void print() { 
    System.out.println("print method 2");
  }
}

这样,当项目启动,定时任务就会按照规则按时执行了。

Spring Boot中使用定时任务

Spring Boot中使用更加方便。

引入springboot starter


   org.springframework.boot
   spring-boot-starter

在程序入口启动类添加@EnableScheduling,开启定时任务功能

@SpringBootApplication
@EnableScheduling
public class Application {

 public static void main(String[] args) {
   SpringApplication.run(Application.class, args);
 }

定义定时任务逻辑

@Component
public class MyTask3 {

 private int count=0;

 @Scheduled(cron="*/6 * * * * ?")
 private void process() {
   System.out.println("this is scheduler task runing "+(count++));
 }
}

任务执行规则说明

先来看看@Scheduled注解的源码

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {

  String cron() default "";

  String zone() default "";

  long fixedDelay() default -1;

  String fixedDelayString() default "";

  long fixedRate() default -1;

  String fixedRateString() default "";

  long initialDelay() default -1;

  String initialDelayString() default "";
}

可以看出,注解中可以传8种参数:

  1. cron:指定cron表达式
  2. zone:默认使用服务器默认时区。可以设置为java.util.TimeZone中的zoneId
  3. fixedDelay:从上一个任务完成开始到下一个任务开始的间隔,单位毫秒
  4. fixedDelayString:同上,时间值是String类型
  5. fixedRate:从上一个任务开始到下一个任务开始的间隔,单位毫秒
  6. fixedRateString:同上,时间值是String类型
  7. initialDelay:任务首次执行延迟的时间,单位毫秒
  8. initialDelayString:同上,时间值是String类型

cron表达式的使用方法

Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:

  1. Seconds Minutes Hours DayofMonth Month DayofWeek Year
  2. Seconds Minutes Hours DayofMonth Month DayofWeek

每一个域可出现的字符如下:

  1. Seconds: 可出现", - * /"四个字符,有效范围为0-59的整数
  2. Minutes: 可出现", - * /"四个字符,有效范围为0-59的整数
  3. Hours: 可出现", - * /"四个字符,有效范围为0-23的整数
  4. DayofMonth: 可出现", - * / ? L W C"八个字符,有效范围为0-31的整数
  5. Month: 可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEC
  6. DayofWeek: 可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
  7. Year: 可出现", - * /"四个字符,有效范围为1970-2099年

每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是:

  1. *:表示匹配该域的任意值,假如在Minutes域使用*, 即表示每分钟都会触发事件。
  2. ?:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和 DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 ?, 其中最后一位只能用?,而不能使用,如果使用*表示不管星期几都会触发,实际上并不是这样。
  3. -:表示范围,例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次。
  4. /:表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次。
  5. ,:表示列出枚举值值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。
  6. L:表示最后,只能出现在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。
  7. W:表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一 到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份。
  8. LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。
  9. #:用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三。

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


推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
小兔纸77
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有