springboot项目使用SchedulingConfigurer实现多个定时任务

news2024/9/27 5:42:52

目录

    • 一、引入依赖
    • 二、配置文件属性配置
    • 三、代码目录结构
    • 四、示例代码
      • 4.1、定义 定时任务基础接口
      • 4.2、定义 定时任务一(每天几点几分执行)
      • 4.3、定义 定时任务二(每几分钟执行一次)
      • 4.4、定义 定时任务注册器
      • 4.5、运行springboot项目查看输出结果

一、引入依赖

  • pom文件引入依赖包

     <!--lombok-->
     <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <optional>true</optional>
      </dependency>
      <!--hutool插件-->
      <dependency>
          <groupId>cn.hutool</groupId>
          <artifactId>hutool-all</artifactId>
          <version>5.7.7</version>
      </dependency>
    

二、配置文件属性配置

  • application.yml配置文件配置

    upload:
        #每天几点几分执行
        taskOnecron: 0 47 21 ? * *
        #每2分钟执行一次
        taskTwocron: 0 0/2 * * * ?
    

三、代码目录结构

  • 目录结构如下图:
    在这里插入图片描述

四、示例代码

4.1、定义 定时任务基础接口

  • 定时任务基础接口 代码示例

    package com.xz.jdk11.schedule;
    
    /**
     * @author xz
     * @description 定义 定时任务基础接口
     */
    public interface BaskTask extends Runnable{
        //获取执行频率
        String getCron();
        //执行任务逻辑
        void execute();
    }
    

4.2、定义 定时任务一(每天几点几分执行)

  • 定时任务一(每天几点几分执行) 代码示例

    package com.xz.jdk11.schedule;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import java.util.Calendar;
    
    /**
     * @author xz
     * @description 定时任务一(每天几点几分执行)
     */
    @Slf4j
    @Component
    public class TaskOne implements BaskTask{
        @Value("${upload.taskOnecron}")
        private String taskOnecron;
    
        @Override
        public String getCron() {
            return taskOnecron;
        }
    
        @Override
        public void execute() {
            log.info("定时任务一(每天几点几分执行一次),执行开始时间:{}",Calendar.getInstance().getTime());
        }
        @Override
        public void run() {
            execute();
        }
    }
    

4.3、定义 定时任务二(每几分钟执行一次)

  • 定时任务二(每几分钟执行一次) 代码示例

    package com.xz.jdk11.schedule;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    import java.util.Calendar;
    
    /**
     * @author xz
     * @description 定时任务二(每几分钟执行一次)
     */
    @Slf4j
    @Component
    public class TaskTwo implements BaskTask{
        @Value("${upload.taskTwocron}")
        private String taskTwocron;
    
        @Override
        public String getCron() {
            return taskTwocron;
        }
    
        @Override
        public void execute() {
            log.info("定时任务二:每几分钟执行一次,执行开始时间:{}", Calendar.getInstance().getTime());
        }
    
        @Override
        public void run() {
            execute();
        }
    }
    

4.4、定义 定时任务注册器

  • 定时任务注册器 代码示例

    package com.xz.jdk11.schedule;
    
    import cn.hutool.core.util.StrUtil;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.scheduling.annotation.SchedulingConfigurer;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
    import org.springframework.scheduling.config.ScheduledTaskRegistrar;
    import org.springframework.scheduling.support.CronTrigger;
    
    import java.util.Map;
    
    /**
     * @author xz
     * @description 定时任务注册器
     */
    @EnableScheduling
    @Configuration
    @Slf4j
    public class ReUploadTask implements SchedulingConfigurer {
    
        @Autowired
        private ApplicationContext applicationContext;
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            //在注册器添加定时任务前,添加线程池
            ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
            threadPoolTaskScheduler.setPoolSize(10);
            threadPoolTaskScheduler.initialize();
            scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
            //获取所有的定时任务
            Map<String,BaskTask> map=applicationContext.getBeansOfType(BaskTask.class);
            //遍历注册
            for(String key:map.keySet()){
                BaskTask baskTask = map.get(key);
                scheduledTaskRegistrar.addTriggerTask(
                        baskTask,triggerContext -> {
                            if(StrUtil.isBlank(baskTask.getCron())){
                                return null;
                            }
                            return new CronTrigger(baskTask.getCron()).nextExecutionTime(triggerContext);
                        }
                );
            }
        }
    }
    

4.5、运行springboot项目查看输出结果

  • 输出结果如下所示:
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

欧拉系统部署NextCloud与常见部署问题解决

欧拉系统部署NextCloud与常见部署问题解决一、欧拉系统安装二、openEuler安装图形界面Ukui三、yum安装的npm包进行本地保存设置&#xff08;个人任务需要&#xff09;四、部署nextCloud4.1构建LAMP环境基础4.1.1开启httpd,防火墙端口号4.1.2开启MariaDB服务4.1.3安装并测试php4…

2023/1/4总结

今天AC了三个题目&#xff1a; 第一个题目&#xff1a;P4913 【深基16.例3】二叉树深度 (1条消息) P4913 【深基16.例3】二叉树深度_lxh0113的博客-CSDN博客 第二个题目&#xff1a;P1229 遍历问题 (1条消息) P1229 遍历问题_lxh0113的博客-CSDN博客 第三个题目&#xff1…

药品市场信息查询-药品数据库(全面)

药品市场信息包含了药品招标、药品投标、药品集采、药品销售数据&#xff08;医院、零售&#xff09;、药品海关进出口数据、药品交易&#xff08;药品license in/out&#xff09;、价格、一致性评价、政策法规、药品公司等多个方面的数据信息&#xff0c;是医药行业市场信息工…

双向循环链表的讲解及实现(图解+代码/C语言)

本次为大家分享的是双向循环链表的增删查改等系列操作。 目录 一、图解双向循环链表结构 二、分步实现 &#xff08;1&#xff09;创建并初始化 &#xff08;2&#xff09;链表元素打印 &#xff08;3&#xff09;头插和尾插 &#xff08;4&#xff09;判断链表为空 &a…

MySQL调优-MySQL索引优化实战一

目录 MySQL调优-MySQL索引优化实战一 插入数据&#xff1a; 举一个大家不容易理解的综合例子&#xff1a; 1、联合索引第一个字段用范围不会走索引 2、强制走索引 什么是回表&#xff1f;为什么要回表&#xff1f;如何进行回表&#xff1f; 但是回表具有很大的弊端&#…

NetInside网络分析帮您解决系统性能问题(二)

前言 某大学信息中心负责人表示&#xff0c;有用户反馈&#xff0c;在通过VPN访问某一IP的80端口时连接时断时续。同时信息中心给到的信息是通过VPN&#xff1a;XXX.XXX.253.5访问IP地址XXX.XXX.130.200的80端口出现访问时断时续问题。 前一文章我们分析了系统整体性能分析&a…

学编程有哪些误区吗?避坑指南拿去不谢!

学习编程时信心满满&#xff0c;但反而效率不高&#xff0c;从“入门”到“放弃”&#xff0c;你肯定猜中了这些误区&#xff01; 今天就专门写了一篇避坑指南&#xff0c;提前避开误区&#xff0c;有助于更好学习编程。 误区1&#xff1a;忽略基础&#xff0c;好高骛远 现在…

@Column写在属性和写在get方法上面的区别

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

【YOLOv7/YOLOv5系列改进NO.51】融入多分支空洞卷积结构RFB-Bottleneck改进PANet构成新特征融合网络

文章目录前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv7&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列…

axios中get、post请求传参区别及使用

axios 发送请求时 params 和 data 的区别 params 中的参数是通过地址栏传参&#xff0c;一般用于get请求data 是添加到请求体&#xff08;body&#xff09;中的&#xff0c; 一般用于post请求get请求只能传query参数&#xff0c;query参数都是拼在请求地址上的post可以传body和…

qt使用qxlsx实现xlsx、xls表格文件快速写入和读取

一、前言 本片文章主要记录和分享一下qt使用qxlsx开源文件读写xlsx表格文件用法。 目录一、前言二、环境三、正文1.读取指定xlsx文件2.保存xlsx文件3.保存xlsx文件内容过大崩溃解决方案一4.保存xlsx文件内容过大崩溃解决方案二四、结语二、环境 windows linux qt5.7 三、正文…

【财务】FMS财务管理系统---对账平台

人工进行对账工作是非常繁杂的&#xff0c;此时&#xff0c;就非常有必要建设一个对账平台。笔者在本文介绍了对账平台的相关内容&#xff0c;分享给大家。 前面介绍过应收对账、财务应付结算两部分内容&#xff1b;应收对账主要是调用第三方支付的接口获取支付流水信息与我司的…

C++设计模式:三种工厂模式详解(简单工厂,工厂模式,抽象工厂)

文章目录简单工厂模式简单工厂实现步骤简单工厂优缺点工厂模式工厂模式和简单工厂模式有什么不同&#xff1f;工厂模式实现步骤实现代码工厂模式优缺点抽象工厂模式抽象工厂模式实现步骤实现代码抽象工厂模式优缺点简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂…

【算法】算法分析技术(第一章习题解答)

1 算法分析技术 1.1 假设 fff 和 ggg 是定义在自然数集合上的函数, 若对某个其他函数 hhh 有 fO(h)f O(h)fO(h)和 gO(h)g O(h)gO(h) 成立, 那么证明 fgO(h)f g O(h)fgO(h) 证明&#xff1a; 根据已知条件 fO(h)f O(h)fO(h)&#xff0c;存在 c1>0c_{1}>0c1​>0 …

错题记录2:源码补码二进制转换

补码原码二进制一直是本人比较头疼的问题&#xff0c;今日找题目来做发现还是错得多&#xff0c;记录以下&#xff0c;再回顾一遍。 1.如下代码输出的是什么&#xff08; &#xff09; char a101; int sum200; a27;suma; printf("%d\n",sum); A: 327 B: 99 C: 3…

【MySQL】详解MySQL数据库事务

MySQL数据库事务数据库事务特性事务的并发问题事务的隔离级别分布式事务解决方案1.XA 协议2.TCC3.消息一致性方案4.阿里云中的全局事务服务 GTS数据库事务特性 数据库事务具备ACID四大特性&#xff1a; 原子性&#xff1a;是指事务操作时具备原子操作的&#xff0c;就是说整…

分布式系统架构

分布式系统定义 分布式系统&#xff1a;硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 为什么需要分布式系统 提升系统吞吐量&#xff1a;集群协同解决单机性能瓶颈提高系统可用性 &#xff1a;冗余部署&#xff0c;各…

OSS阿里云存储

一、开通“对象存储OSS”服务 2、进入管理控制台 二、控制台使用 点击Buket列名&#xff0c;Buket可以看作是一系列的虚拟内存空间它是一个独立的小个体 创建mystudent 创建成功后就有下面的样子了 &#xff0c;创建的时候读写权限&#xff0c;我们选择公共读&#xff0c…

matlab中sign函数的使用(提取符号)

仅用于记录自己学习过程中遇到的函数 matlab中sign函数的使用&#xff0c;提取符号 一、语法 Y sign(x) 返回与 x 大小相同的数组 Y&#xff0c;其中 Y 的每个元素是&#xff1a; 1&#xff0c;前提是 x 的对应元素大于 0。 0&#xff0c;前提是 x 的对应元素等于 0。 -1&am…

CAP定理与分布式事务理论

文章目录一、CAP定理1.1 一致性1.2 可用性1.3 分区容错1.4 定理的矛盾点二、分布式事务理论2.1 BASE理论2.2 解决分布式事务思路一、CAP定理 分布式系统有三个指标。 Consistency&#xff08;一致性&#xff09;Availability&#xff08;可用性&#xff09;Partition toleranc…