首页 > 其他分享 >Spring Task定时任务

Spring Task定时任务

时间:2024-01-25 21:13:36浏览次数:22  
标签:Task 列如 Spring springframework cron 任务 import 定时

任务调度

任务调度是为了让系统自动完成任务,在约定好的特定时刻去执行任务的过程

列如:

  • 在电商系统中需要在下午6点自动发送优惠卷
  • 订票系统中根据车次不同,不同时间段分批发票

实现任务调度方法

  1. 多线程方式,利用sleep
  2. JDK提供的API:列如Timer,ScheduledExecutor
  3. 列如Quartz
  4. spring task

Spring Task实现定时任务

SpringBoot默认在无任何第三方依赖的情况下使用spring-context 模块提供的定时任务工具spring Tack。我们只需要使用@EnableScheduling注解就可以开启相关的定时任务功能(实现类)

1.启动类添加注解

也就是说我们需要在启动类添加开启任务调度的注解(@EnableScheduling)

package com.zzyl;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling  //开启任务调度
@EnableCaching
public class ZzylApplication {

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

2.自定义定时任务类

package com.zzyl.task;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * @author sjqn
 */
@Component
@Slf4j
public class MyTask {

    /**
     * 定时任务 每隔5秒触发一次
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void executeTask(){
        log.info("定时任务开始执行:{}", LocalDateTime.now());
    }
}

添加@Component注解受容器管理,注解@Scheduled()定义定时任务类

其中设计到了cron表达式

cron表达式

我们在设置时间频率的时候,通常情况下都会使用cron表达式来表达

cron表达式是一个字符串,用来设置定时规则,由其部分组成,每部分中间用空格隔开

组合部分 含义 取值范围
第一部分 Seconds(秒) 0-59
第二部分 Minutes(分) 0-59
第三部分 Hours(时) 0-23
第四部分 Day-of-Month(天) 1-31
第五部分 Month(月) 0-11
第六部分 Day-of-Week(星期) 1-7
第七部分 Year(年) 1970-2099

此外,cron表达式还可以包含一些特殊符号来设置更加灵活的定时规则

符号 含义
? 表示不确定的值,当两个子表达式其中一个被指定了值以后,为了避免冲突,需要将另外一个的值设为"?"。例如:想在每月20日触发调度,不管20号时星期几,只能用如下写法:0 0 0 20 * ? ,其中最后一位只能用"?"
* 代表所有可能的值
, 设置多个值,列如"26,29,33" 表示在26分,29分,33分各自运行一次任务
- 设置取值范围,列如"5-20",表示从5分到20分钟,每分钟运行一次任务
/ 设置频率或间隔,如"1/15"表示从1分开始,每隔15分种运行一次任务
L 用于每月,或每周,表示每月的最后一天,或每个月的最后星期几,列如"6L"表示每月的最后一个星期六
W 表示离给定日期最近的工作日,列如"15W"放在每月上表示离本月15日最近的工作日
# 表示该月第几个周X,列如"6#3"表示该月第三个周五

例子

cron表达式 含义
*/5 * * * * ? 每隔5秒运行一次任务
0 0 23 * * ? 每天23点运行一次任务
0 0 1 1 * ? 每月1号凌晨1点运行一次任务
0 0 23 L * ? 每月最后一天23点运行一次任务
0 26,29,33 * * * ? 在26分,29分,33分运行一次任务
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时运行一次任务
0 15 10 ? * 6#3 每月的第三个星期五上午10:15运行一次任务

标签:Task,列如,Spring,springframework,cron,任务,import,定时
From: https://www.cnblogs.com/yifan0820/p/17988164

相关文章

  • SpringBoot 接口数据加解密解说,你的系统真的安全吗?
    xx项目有于安全问题,需要对接口整体进行加密处理,额,摸摸头上飘摇着而稀疏的长发,感觉我爱了。和产品、前端同学对外需求后,梳理了相关技术方案,主要的需求点如下:尽量少改动,不影响之前的业务逻辑;考虑到时间紧迫性,可采用对称性加密方式,服务需要对接安卓、IOS、H5三端,另外考虑到H5端存储密......
  • 三、SpringCloud Alibaba之Ribbon
    3.1、负载均衡介绍单台服务器不管好好坏总是会遇到性能瓶颈,而解决单台服务器瓶颈方式就是采用集群。高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的计算能力。在一个集群中,每一台服务器提供的功能是一样,但是每一台服务器的类型可能是不一样的(性能、配置、价格等等),......
  • Spring Boot框架actuator配置不当漏洞
    漏洞描述【安全预警】ApacheDubbo远程代码执行漏洞、SpringBoot配置不当及微软1月补丁漏洞部分网站数据库存在SpringBoot配置不当漏洞,利用网站数据库SpringBoot漏洞可读取Redis数据库用户名和密码。连接数据库可查询掌握运维综合服务平台管理员口令哈希。漏洞等级......
  • SpringBoot 依赖管理机制
     依赖管理机制思考:1、为什么导入starter-web所有相关依赖都导入进来?开发什么场景,导入什么场景启动器。maven依赖传递原则。     A依赖B B依赖C:   导入A就拥有B和C导入场景启动器。场景启动器自动把这个场景的所有核心依赖全部导入进来2、为什么版......
  • 7.spring mongo
    配置MongoRepository可以根据实体中的字段,自己进行组合查询,创建一个继承MongoRepository的接口,在该接口中定义方法示例实体类importlombok.Getter;importlombok.Setter;importorg.bson.types.ObjectId;importorg.springframework.data.annotation.Id;importorg.......
  • spring boot lombok插件
    Lombok集成首先我们需要在IDEA中安装好Lombok插件,如果你使用的是最新版IDEA2020.3,则Lombok插件已经内置,无需安装。 之后在项目的pom.xml文件中添加Lombok依赖,SpringBoot2.1.x版本后无需指定Lombok版本,SpringBoot在spring-boot-dependencies中已经内置。<!--lombok依赖--><......
  • Spring的事务使用教程
    什么是事务?事务(Transaction)是数据库操作最基本单元,逻辑上一组操作,要么都成功,要么都失败,如果操作之间有一个失败所有操作都失败。事务四个特性(ACID)原子性一组操作要么都成功,要么都失败。一致性一组数据从事务1合法状态转为事务2的另一种合法状态,就是一致。隔离性事务1......
  • SpringBoot:Springboot整合Mqtt并处理问题
    搭建mqtt服务Docker搭建MQTT服务:https://www.cnblogs.com/nhdlb/p/17960641项目结构这是我的项目结构,主要有两个模块base-modules(业务模块)、base-utils(工具模块)组成,其中base-mqtt服务为工具模块,用于提供给其他业务模块引用依赖的。base-mqtt模块pom.xml这里我的Sprin......
  • EXTI中断、TIM定时器
    一.中断系统1.中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。2.中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。......
  • springBoot自定义参数注解
    springBoot自定义参数注解前置条件:新建一个springboot项目1.新建一个标记注解@Authimportjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;/***@authorwa......