SpringBoot配置动态定时任务

1.配置ScheduledTask

主要是实现SchedulingConfigurer,动态传入cron。

package com.hzl.boot.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.scheduling.support.PeriodicTrigger;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;
import java.util.Date;/*** @description @PropertySource:指定加载配置文件位置,@ConfigurationProperties:加载属性的前缀* @author: zhiLin* @create: 2022-09-24 21:37**/
@Data
@Component
@ConfigurationProperties("dynamic")
@PropertySource("classpath:/config/cron.properties")
public class ScheduledTask implements SchedulingConfigurer {private String test;private Long period = 500L;@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.addTriggerTask(() -> System.out.println("Current time = "+ LocalDateTime.now()), new Trigger() {@Overridepublic Date nextExecutionTime(TriggerContext triggerContext) {// 1. 使用 cronTrigger触发器动态修改定时执行时间CronTrigger cronTrigger = new CronTrigger(test);Date nextExecutionTime = cronTrigger.nextExecutionTime(triggerContext);// 2. PeriodicTrigger设置任意时间段的执行任务(另一种方式)
//				PeriodicTrigger periodicTrigger = new PeriodicTrigger(period);
//				Date nextExecutionTime1 = periodicTrigger.nextExecutionTime(triggerContext);return nextExecutionTime;}});}
}

2.配置执行周期

springboot的resources目录下新建/config/cron.properties,并配置如下:

dynamic.test=0/20 * * * * ?

3.编写代码

编写ScheduledController,进行测试用

package com.hzl.boot.controller;import com.hzl.boot.common.Result;
import com.hzl.boot.config.ScheduledTask;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** @description* @author: zhiLin* @create: 2022-09-24 21:56**/
@RestController
@RequestMapping("schedule")
public class ScheduledController {@Resourceprivate ScheduledTask scheduledTask;@GetMapping("/cron")public Result dynamicModifiedCron(@RequestParam String cron) {System.out.println("new cron time = " + cron);scheduledTask.setTest(cron);return Result.success();}}

4.浏览器测试

浏览器输入 http://localhost:9090/schedule/cron?cron=0/5 * * * * ?
成功将定时任务从每20秒执行改为每5秒执行
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模态系列论文----最详细的多模态论文总结(BLIP、BEIT、CoCa等)

1 多模态概述 多模态指的是多种模态的信息数据,包括:文本、图像、视频、音频等。多模态任务是指需要同时处理两种或多种不同类型的数据的任务。近年来,随着深度学习技术的发展,多模态任务取得了显著的进步。特别是VIT&#xff08…

模拟Toast 自定义提示框

模拟Toast 自定义提示框 前言 为满足产品需求,发现现在的ToastUtils不是太重就是不太满足需求,这边写个简单易用的工具,几十行代码解决的问题,还要啥轮子。 功能如下: 自动消失相对锚点位置 可配置,正中间&#x…

RTOS任务切换过程中堆栈的使用情况

我们知道 Cortex-M3 系列单片机内部有双堆栈机制。即 Cortex‐M3 拥有两个堆栈指针:主堆栈(MSP)和进程堆栈(PSP)。任一时刻只能使用其中的一个。通过控制寄存器 CONTROL 中的选择位进行控制。 两个堆栈指针如下&#…

SparkJDBC性能优化指南

前言 本文以Mysql为例。Spark作为一种强大且广泛应用于大数据处理的分布式计算框架,有着出色的性能和可伸缩性。在使用Spark处理大规模数据时,往往需要与关系型数据库MySQL进行交互。然而,由于MySQL和Spark本身的特性之间存在一些差异,直接使用Spark读写MySQL的默认配置可…

JVM理论(一)基础概念

JVM概述 JVM就是二进制字节码的运行环境,负责装载字节码到其内存,解释/编译为对应平台上的机器指令执行,每条java指令在java虚拟机规范中都有详细定义,包括如何取、处理操作数等;JVM特点如下 一次编译,到处运行(各CPU的架构不同的情况下JVM为了实现跨平台,字节码指…

WSL2 及 docker开发环境搭建

WSL2 及 docker开发环境搭建 1.使能WSL 控制面板->程序->程序和功能->启动或关闭Windows功能->勾选红框中选项->确认后重启电脑  2.下载Linux Kernel Update安装包 下载地址如下, 附件已将下载的安装包作为附件形式上传,…

6月《中国数据库行业分析报告》已发布,首发空间、搜索引擎数据库【全球产业图谱】

为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生…

高效协作助力企业发展:企业网盘在提升工作效率方面的重要作用!

企业网盘是一种专门为了企业协作工作而设计的在线文档管理平台,受到了众多企业用户的青睐与喜爱。企业网盘如何大幅提高企业协作工作效率? 1、提高文件访问效率 传统的文件共享方式往往使用邮件附件或U盘进行传递,可能会遇到文档版本不一致、…

C语言 - AES软件加解密算法

概述 (AES)RIJNDAEL算法是一个数据块长度盒密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于256位的32位任意倍数。深入学习请参考《密码学》书籍,谢谢各位参阅。 验证环境&#xf…

阿里云ACE认证和华为云HCIE认证对比分析

最近有不少小伙伴私信问我,阿里云、腾讯云、华为云这几大厂商的云认证,哪一个更好,今天有空来跟大家认真地分析一下。 01-从云计算市场占有率来看 作为国内云计算市场的探路人,阿里虽然一路走来有过很多坎坷,但也不负…

Netty的事件驱动模型nio,epoll,oio各个使用场景和支持的网络通讯协议

1.首先说一下nio和epoll有什么区别 在Netty中,Epoll和NIO是两种不同的事件驱动模型,用于实现网络通信。它们在底层的实现和性能特征上有一些区别。 1. NIO(Non-blocking I/O):NIO是Java原生的非阻塞I/O模型&#xff…

【hadoop】Google的基本思想

Google的基本思想 三架马车GFS分布式文件系统的核心架构和原理机架感知 MapReduce计算模型PageRank问题MapReduce BigTable 三架马车 Google的基本思想主要有三个,称之为三架马车,分别是GFS(Google File System)、MapReduce计算模…