SpringBoot——Scheduled定时任务

目录

1.静态定时任务

2.动态定时任务


在一些业务场景中,我们需要定义一些任务在我们指定的时间或是每隔一个时间段就自动执行,来作为任务的前提,保证业务的执行。比如:我们需要一个定时任务,每天早上6点执行,对数据库中的某个日期字段进行修改,修改为当天时间。

1.静态定时任务

springboot中为我们提供了自带的定时任务。

首先,我们需要让项目能使用定时任务:

@EnableScheduling
@SpringBootApplication
public class CourtSeckillMain {
    public static void main(String[] args) {
        SpringApplication.run(CourtSeckillMain.class,args);
    }
}

然后,我们需要在业务类中编写代码:

    @Override
    @Scheduled(cron = "0 0 6 * * ?")
    //秒 分 时 日 月 周 年(可选);*表所有可能的值,-指定范围值,/表示步长
    public void doScheduleTask(){
        log.info("执行定时任务");
        //这里是你的业务逻辑
    }

 上述代码称为静态定时任务,主要依靠 @Scheduled 标签实现,根据其参数cron表达式每隔时间间隔自动执行任务。

cron参数:cron表达式中可填6个值,分别对应 秒 分 时 日 月 周 年。* 表所有可能的值,- 指定范围值,/ 表示步长,?表示不指定值即该值不影响。

0 0 6 * * ?    表示每天6点执行任务
0/5 * * * * ?   表示每5秒执行一次任务
0 * 6 * * ?    表示每天的6点-7点之间的每一分钟都执行一次
0 * 6-8 * * ?  表示每天的6点-9点之间的每一分钟都执行一次
5 10 6 * * ?   表示每天的6:10:05执行一次
0 10,44 14 ? 3 WED  表示三月的每周三的14:10和14:44触发

静态定时任务通过 @Scheduled 标签指定好执行时间,从而执行定时任务,使用较为方便但不太灵活,指定好执行时间后则无法更改。

2.动态定时任务

如果我们需要动态修改定时任务的cron值,我们可以通过继承 SchedulingConfigurer 类来实现:

@Data
@Slf4j
@Component
@ConfigurationProperties(prefix = "scheduled.task")
public class ScheduleTask implements SchedulingConfigurer {

    private String cron;

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(() -> {
            // 业务代码
            log.info("定时任务,currentTime:{}", LocalDateTime.now());

        }, triggerContext -> {
            // 使用CronTrigger触发器,可动态修改cron表达式来操作循环规则
            CronTrigger cronTrigger = new CronTrigger(cron);
            return cronTrigger.nextExecutionTime(triggerContext);
        });
    }
}

application.yml中存放初始的cron值:

scheduled:
  task:
    cron: "0/5 * * * * ?"    #每5秒执行一次

在controller中编写接口,动态修改cron值:

@RestController
@RequiredArgsConstructor
public class seckillController {

    private final ScheduleTask scheduleTask;

    @GetMapping("/test")
    public String test(@RequestParam("cron") String cron){
        scheduleTask.setCron(cron);
        log.info("修改cron为:{}",scheduleTask.getCron());
        return scheduleTask.getCron();
    }

}

然后我们运行程序,并通过接口修改cron值:

可以看到,修改之前,每5秒执行一次定时任务;我们将cron修改为每天10点内的每分钟执行后,变成了每分钟才执行一次。

由此实现了自定义的定时任务,并由接口动态修改定时任务的执行时间。

需要注意的是:每次修改完定时任务执行时间之后,需要执行完上一次的定时任务才会让新定义的执行时间生效。

我们由 ScheduleTask.configureTasks() 方法中的上述代码 可以看到,指定下一次任务的执行间隔是由 cronTrigger.nextExecutionTime(triggerContext) 实现的,而该方法会在一次定时任务执行完结后才调用。

ScheduleTask.configureTasks() 方法中指定定时任务执行间隔)

所以,我们在上述运行结果中看到,在10:28:30秒执行完一次定时任务,然后在10:28:32我们对cron值进行了修改,定时任务任然按照 0/5 * * * * ? 这一cron值执行了一次,然后才配置了新的cron值。

换言之,如果我们定义了任务每天6点执行,然后某一天将其修改为12点执行,springboot会在第二天的6点执行完后再将cron值修改,然后12点再执行一次。

所以会一定程度上存在重复执行的问题,如果业务需要规避,请谨慎考虑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/11749.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多通道振弦传感器无线采集采集仪如何开始使用

多通道振弦传感器无线采集采集仪如何开始使用 开始使用 设备电源 VS208~432 可使用内置电池(默认)也可使用外部电池工作。 需要特别注意:严禁内置和外部电池(电源)同时使用,严重时会造成短路起火&#xff0…

靶机精讲之CTF4

主机发现 靶机193 端口扫描 服务扫描 80,25(明确版本)攻击面更大 web渗透 blog是交互式的程序 发现index可进行手动爆破(地址包含) http://192.168.10.193/index.html?page../../../../../../../../etc/passwd 无发…

【数据挖掘与商务智能决策】第八章 K近邻算法

第八章 K近邻算法 1.K近邻算法简单代码演示 import pandas as pd df pd.read_excel(葡萄酒.xlsx) df原始样本酒精含量(%)苹果酸含量(%)分类0样本15201样本26102样本34103样本48314样本51021 # 特征变量和目标变量的切分 X_train df[[酒精含量(%),苹果酸含量(%)]] y_train …

PHP实现以函数的方式计算阶乘,使用函数输入数值逆序输出的两个代码程序

目录 前言 一、实现以函数的方式计算阶乘 1.1运行流程(思想) 1.2代码段 1.3运行截图 二、使用函数输入3个数求和,并以表单形式输出 2.1运行流程(思想) 2.2代码段 2.3运行截图 前言 1.因多重原因,…

【C++】模板进阶--非类型模板参数模板特化及分离编译

文章目录一、非类型模板参数二、模板的特化1.模板特化的概念2.函数模板的特化3.类模板的特化3.1 全特化3.2 偏特化4.类模板特化应用示例三、模板的分离编译四、模板总结一、非类型模板参数 模板参数分为类型形参与非类型形参,其中,类型形参即出现在模板…

Spring启动及Bean实例化过程来看经典扩展接口

目录 一、Spring启动及Bean实例化过程 二、分析其对应经典扩展接口 三、对开发的指导意义 备注:以下总结只是一些基本的总结思路,具体每个扩展接口的应用后续进行分析总结。 一、Spring启动及Bean实例化过程 Spring启动及Bean实例化的过程&#xff0…

CSS实现三角形的四种方法

方法一&#xff1a;使用 border (常见) 【解释】不设置宽高&#xff0c;用边框大小控制三角型大小 【分解步骤】 设置一个div不设宽高 【示例】 <style>#triangle{width: 0;height: 0;border: 100px solid;border-color: orangered skyblue gold yellowgreen;} </s…

Python第三方库安装

看见更大的Python世界 Python社区PyPI The Python Package Index PyPI: Python Package Index PSF维护的展示全球Python计算生态的主站 学会检索并利用PyPI&#xff0c;找到合适的第三方库开发程序 实例&#xff1a;开发与区块链相关的程序 第1步&#xff1a;在pypi.org…

第01章_Java语言概述

第01章_Java语言概述 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. Java知识脉络图 1.1 Java基础全程脉络图 1.2 本章专题与脉络 2. 抽丝剥茧话Java 2.1 当前大学生就业形势 麦可思研究院…

fMRI研究 | 社交情境下的混合情绪

导读 背景&#xff1a;神经科学通常都是单独研究各种情绪&#xff0c;而混合的情绪状态&#xff08;例如愉悦和厌恶、悲伤和快乐的共存&#xff09;在日常生活中很常见。心理生理学和行为学证据表明&#xff0c;混合情绪可能具有不同于其组成情绪的反应特征。然而&#xff0c;…

PHP快速入门02-PHP语言基础

文章目录前言一、 数据类型1.1 String&#xff08;字符串&#xff09;1.2 Integer&#xff08;整型&#xff09;1.3 Float&#xff08;浮点型&#xff09;1.4 Boolean&#xff08;布尔型&#xff09;1.5 Array&#xff08;数组&#xff09;1.6 Object&#xff08;对象&#xff…

重感知还是重地图?其实无需选择

近来&#xff0c;关于自动驾驶应该重感知还是重地图是个热点话题&#xff0c;很多重量级车厂、自动驾驶供应商都开始提出重感知轻地图的方案&#xff0c;并承诺很快能发布出对应的产品。业界也出现了高精地图已“死”等类似的言论。 一时之间&#xff0c;似乎轻地图已经成为了…

SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁

文章目录1、步骤2、具体过程1、引入pom依赖2、修改配置文件3、单元测试4、测试结果3、redis运行情况4、项目中实际应用5、加锁解决缓存击穿问题代码一&#xff08;存在问题&#xff09;代码二&#xff08;问题解决&#xff09;6、新问题7、分布式锁1、步骤 前提条件&#xff1…

Attention is all your need——Transformer论文

摘要 此序列转录模型仅仅依赖于注意力机制&#xff0c;而不使用循环或者是卷积&#xff0c;将循环全部换成了multi-headed self- attention 介绍 RNN的特点、并行程度低。 Attention在RNN上的应用。 引入注意力机制&#xff0c;提高并行度。 背景 使用卷积对长的序列难以…

3D开发工具HOOPS最新解析合集,助力实现web端高性能模型渲染

一、3D技术为创新提供强大助力 不管您想搭建桌面、WEB或者移动端APP应用&#xff0c;技术领先全球的HOOPS Platform组件都可以为您提供弹性的3D集成架构&#xff0c;同时&#xff0c;一批可信任的工业领域3D技术专家也将为您提供技术支持服务。 如果您的客户期望有一种在多个…

第三十一天 Linux介绍和基础命令

目录 1.前言 1.1 什么是Linux 1.2 为什么要学Linux 1.3 学完Linux能干什么 2.Linux简介 2.1 主流操作系统 2.2 Linux发展历史 3. Linux安装 3.1 安装方式介绍 3.2 安装VMware 3.3 安装Linux 3.4 网卡设置 3.5 安装SSH连接工具 3.6 Linux目录结构 4.Linux常用命令…

DHTMLX Gantt入门使用教程【引入】:如何开始使用 dhtmlxGantt

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求&#xff0c;具备完善的甘特图图表库&#xff0c;功能强大&#xff0c;价格便宜&#xff0c;提供丰富而灵活的JavaScript API接口&#xff0c;与各种服务器端技术&am…

Excel玩转自然语言查询

ChatGPT火出圈&#xff0c;人类被人工智能替代又成为热门话题。有人欢喜&#xff0c;有人忧&#xff0c;也有人不以为意&#xff0c;觉得离自己工作远着呢&#xff0c;比如现在是用Excel做报表&#xff0c;有本事你动动嘴就直接把Excel里面的数据查询出来啊。 你可别说&#xf…

【题解】P4055 [JSOI2009] 游戏

link 题目大意 题目说得比较清楚。 题解 前置知识&#xff1a;二分图最大匹配、基础博弈论。 每个点只能走一次的四联通点阵&#xff0c;可以想到二分图匹配。 将其套路地奇偶分点&#xff0c;相邻两点连边&#xff08;显然不能为 #&#xff09;。 先求一个最大匹配。 …

5G/V2X赛道「重启」

在提升高阶智能驾驶安全性和感知冗余能力的道路上&#xff0c;除了激光雷达、高精度地图及定位&#xff0c;还有一项技术可能即将掀起一场新的风暴。 就在今年3月&#xff0c;作为全球通信领域的年度风向标 — 2023世界移动通信大会&#xff08;MWC&#xff09;上&#xff0c;…