springboot项目使用SchedulingConfigurer实现多个定时任务的案例代码

目录
  • 一、引入依赖
  • 二、配置文件属性配置
  • 三、代码目录结构
  • 四、示例代码
    • 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项目查看输出结果

输出结果如下所示:

到此这篇关于springboot项目使用SchedulingConfigurer实现多个定时任务的文章就介绍到这了,更多相关springboot多个定时任务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Springboot执行多个定时任务并动态获取定时任务信息

    简介 因为一些业务的需要所有需要使用多个不同的定时任务,并且每个定时任务中的定时信息是通过数据库动态获取的.下面是我写的使用了Springboot+Mybatis写的多任务定时器. 主要实现了以下功能: 1.同时使用多个定时任务 2.动态获取定时任务的定时信息 说明 因为我们需要从数据库动态的获取定时任务的信息,所以我们需要集成 SchedulingConfigurer 然后重写 configureTasks 方法即可,调用不同的定时任务只需要通过service方法调用不用的实现返回对应的定时任

  • SpringBoot设置动态定时任务的方法详解

    之前写过文章记录怎么在SpringBoot项目中简单使用定时任务,不过由于要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务执行时间,实在不太灵活. 经过网上搜索学习后,特此记录如何在SpringBoot项目中实现动态定时任务. 因为只是一个demo,所以只引入了需要的依赖: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <ar

  • SpringBoot使用SchedulingConfigurer实现多个定时任务多机器部署问题(推荐)

    目录 一.使用SchedulingConfigurer实现多个定时任务 二.定时任务多机器部署解决方案 三.基于redis实现的代码示例 3.1.基于redis实现的概述 3.2.基于redis实现的代码 3.2.1.代码目录结构 3.2.2.引入依赖包 3.2.3.配置文件新增redis连接配置 3.2.4.自定义redis锁注解类 3.2.5.自定义redis切面类(即aop类) 3.2.6.自定义redis命令操作类 3.2.7.在定时任务一中添加自定义注解 3.2.8.在定时任务二中添加

  • springboot项目使用SchedulingConfigurer实现多个定时任务的案例代码

    目录 一.引入依赖 二.配置文件属性配置 三.代码目录结构 四.示例代码 4.1.定义 定时任务基础接口 4.2.定义 定时任务一(每天几点几分执行) 4.3.定义 定时任务二(每几分钟执行一次) 4.4.定义 定时任务注册器 4.5.运行springboot项目查看输出结果 一.引入依赖 pom文件引入依赖包 <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifa

  • SpringBoot使用过滤器、拦截器和监听器的案例代码(Springboot搭建java项目)

    目录 SpringBoot使用过滤器.拦截器和监听器 一.SpringBoot使用过滤器 Spring boot过滤器的使用(两种方式) 方式一: 方式二: 二.SpringBoot使用拦截器 三.过滤器和拦截器的执行顺序 四.SpringBoot使用监听器 1.统计网站最多在线人数监听器的例子 2.springboot监听器的使用(以实现异步Event监听为例子) SpringBoot使用过滤器.拦截器和监听器 一.SpringBoot使用过滤器 Spring boot过滤器的使用(两种方式)

  • 配置springboot项目使用外部tomcat过程解析

    这篇文章主要介绍了配置springboot项目使用外部tomcat过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在pom文件中添加依赖 <!--使用自带的tomcat--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifac

  • Springboot项目如何使用apollo配置中心

    这篇文章主要介绍了Springboot项目如何使用apollo配置中心,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. 引入 apollo 配置依赖 <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.1.0<

  • SpringBoot项目的测试类实例解析

    这篇文章主要介绍了SpringBoot项目的测试类实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. package soundsystem; import static org.junit.Assert.*; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autow

  • 浅谈springboot项目中定时任务如何优雅退出

    在一个springboot项目中需要跑定时任务处理批数据时,突然有个Kill命令或者一个Ctrl+C的命令,此时我们需要当批数据处理完毕后才允许定时任务关闭,也就是当定时任务结束时才允许Kill命令生效. 启动类 启动类上我们获取到相应的上下文,捕捉相应命令.在这里插入代码片 @SpringBootApplication /**指定mapper对应包的路径*/ @MapperScan("com.youlanw.kz.dao") /**开启计划任务*/ @EnableScheduling

  • springBoot项目集成quartz开发定时任务案例及注意事项

    目录 quartz下载.安装 实战案例 常见问题及解决方案 quartz下载.安装 Quartz是完全由java开发的一个开源的任务日程管理系统,任务进度管理器就是一个在预先确定的时间到达时,负责执行(或者通知)一段程序或功能的系统,即定时执行某个任务.Quartz用一个小Java库发布文件(.jar文件),这个库文件包含了所有Quartz核心功能.这些功能的主要接口(API)是Scheduler接口.它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度. 上图是q

  • SpringBoot实现动态定时任务的示例代码

    目录 前言 配置文件 定时任务核心类 提供修改cron表达式的controller 前言 之前在SpringBoot项目中简单使用定时任务,不过由于要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务执行时间,实在不太灵活.现在我们就来实现可以动态修改cron表达式的定时任务. 配置文件 application-task.yml,其余的配置 application.yml 等就按照springBoot正常配置即可 task: cron: 0/10 * * * * ? t

  • 解决SpringBoot项目使用多线程处理任务时无法通过@Autowired注入bean问题

    最近在做一个"温湿度控制"的项目,项目要求通过用户设定的温湿度数值和实时采集到的数值进行比对分析,因为数据的对比与分析是一个通过前端页面控制的定时任务,经理要求在用户开启定时任务时,单独开启一个线程进行数据的对比分析,并将采集到的温湿度数值存入数据库中的历史数据表,按照我们正常的逻辑应该是用户在请求开启定时任务时,前端页面通过调用后端接口,创建一个新的线程来执行定时任务,然后在线程类中使用 @Autowired 注解注入保存历史数据的service层,在线程类中调用service层保存

随机推荐