spring中使用定时任务

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

首先配置spring开启定时任务

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop"  xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd"> <task:annotation-driven /> <!-- 定时器开关--> <bean id="myTask" class="com.spring.task.MyTask"></bean> <task:scheduled-tasks> <!-- 这里表示的是每隔五秒执行一次 --> <task:scheduled ref="myTask" method="show" cron="*/5 * * * * ?" /> <task:scheduled ref="myTask" method="print" cron="*/10 * * * * ?"/> </task:scheduled-tasks> <!-- 自动扫描的包名 --><context:component-scan base-package="com.spring.task" /> </beans>

定义自己的任务执行逻辑

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"); }
}

2、基于注解使用定时任务

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");}
}

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

3、Spring Boot中使用定时任务

Spring Boot中使用更加方便。

引入springboot starter

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency>

在程序入口启动类添加@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,表示某月的第二个星期三。

看来这个东西还是要经常用才不会忘啊。。。

转载于:https://www.cnblogs.com/luxd/p/7525121.html

Spring Task定时任务的配置和使用详解相关推荐

  1. Spring cloud使用ELK配置与使用详解之elasticsearch

    elasticsearch作为搜索引擎,用处之一就是快速处理日志查 一.简介 集群(Cluster):所有数据提供存储和检索的集合(服务器集合),根据明细来指定要加入哪个集群,默认"elas ...

  2. java spring bean配置文件_Spring基于xml文件配置Bean过程详解

    这篇文章主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通过全类名来配置: class:be ...

  3. java实现每天定时执行任务,Spring Task定时任务每天零点执行一次的操作

    最近根据项目的需求,需要限制用户每天的发送短信数量.这样以来就需要写一个定时任务,每天去置零一次所有用户的发送短信统计数量. 首先,在application.xml文件中添加 接着就是编写自己的业务处 ...

  4. Spring Task定时任务

    ◆Spring Task是Spring 3.0后推出的定时任务模块 ◆Spring Task的职责是按周期后台自动执行任务 ◆Spring Task可利用Cron表达式实现灵活的定时处理 在第一行当中 ...

  5. Spring task定时任务执行一段时间后莫名其妙停止的问题

    前因: 我写了一个小项目,主要功能是用Spring task定时任务每天定时给用户发送邮件.执行了几个月一直没有问题,前几天,莫名其妙的突然不再发送邮件了. 只好花费一些时间来查看到底是什么原因造成的 ...

  6. SpringBoot2.x整合轻量级分布式定时任务ShedLock3.x的使用详解

    目录 前言 SpringBoot2.x整合轻量级分布式定时任务ShedLock3.x的使用详解 一.关于ShedLock 二.ShedLock的三个核心组件 三.ShedLock使用三步走 四.Spr ...

  7. 微服务 分布式配置中心Apollo详解

    微服务 分布式配置中心Apollo详解 1. 配置中心概述 1.1 配置中心简介 1.2 配置中心特点 1.3 配置中心对比 2. Apollo概述 2.1 Apollo简介 2.2 Apollo特点 ...

  8. 【Linux】定时任务crontab和at命令详解

    [Linux]定时任务crontab和at命令详解 linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的 ...

  9. IDEA的安装、配置与使用详解

    IDEA的安装.配置与使用详解 目录结构 IDEA的安装.配置与使用详解 一.IDEA介绍 1. Jet Brains公司介绍 2. IDEA介绍 3. IDEA的主要功能介绍 4. IDEA的主要优 ...

最新文章

  1. SpringBoot集成FreeMarker
  2. 网站性能优化之yahoo军规
  3. linux设备驱动学习(二)——字符设备编写及测试
  4. 模块-from import导入所有工具
  5. SQL Server 2005登录名,用户名,角色,架构之间的关系
  6. IIC软件模拟-读写EEPROM
  7. 回归分析beta值的标准_读懂回归分析-SPSS为例(无广告)
  8. 第一天docker入门
  9. 数据库系统概论第五版学习笔记
  10. M3DGIS三维数字沙盘开发教程第51课可视化交互大数据地理信息系统开发教程第51课
  11. 如何制作基于beaglebone的设备通知Texter ?---凯利讯半导体
  12. iOS菜鸟笔记4:一个简单的TableView
  13. 关于检测Windows电脑电池信息
  14. Ubuntu下wps英文界面切换成中文界面的方法
  15. 蓝桥杯必备算法二:二分搜索
  16. d610网络计算机,尼康D610评测:机身细节
  17. SpringCloud - GateWay服务网关
  18. 完全使用gnu/linux工作
  19. 全国大学建模与计算机应用竞赛,2014年全国大学生数学建模与计算机应用竞赛报名通知...
  20. FFmpeg入门详解之63:画龙点睛:捋起袖子亲手操练直播项目

热门文章

  1. 当UG的License服务器换了后, 客户端如何调整?
  2. Visual Studio .NET 2003 的 一个Bug(2005-5-8)
  3. 全景分割这一年,端到端之路
  4. 重写equals所要遵守的约定
  5. 编程开发之--Oracle数据库--存储过程和存储函数(2)
  6. 如何用Jmeter做压力测试
  7. Linux中的盘符问题
  8. Python实现排序算法:冒泡排序,插入排序,选择排序,快速排序,希尔排序
  9. JavaScript onerror事件
  10. HUB管理步骤、桥端设置步骤和客户端使用步骤