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

 更新时间:2023年01月05日 11:28:38   作者:小志的博客  
这篇文章主要介绍了springboot项目使用SchedulingConfigurer实现多个定时任务,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、引入依赖

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多个定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中hibernate二级缓存详解

    java中hibernate二级缓存详解

    本篇文章中主要介绍了java中hibernate二级缓存详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • SpringBoot整合Mybatis的知识点汇总

    SpringBoot整合Mybatis的知识点汇总

    在本篇文章里小编给各位整理的是关于SpringBoot整合Mybatis的知识点汇总,有兴趣学习的参考下。
    2020-02-02
  • Elasticsearch中FST与前缀搜索应用实战解析

    Elasticsearch中FST与前缀搜索应用实战解析

    这篇文章主要为大家介绍了Elasticsearch中FST与前缀搜索应用实战解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • MyBatis整合Redis实现二级缓存的示例代码

    MyBatis整合Redis实现二级缓存的示例代码

    这篇文章主要介绍了MyBatis整合Redis实现二级缓存的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • SpringBoot使用@ControllerAdvice全局异常处理

    SpringBoot使用@ControllerAdvice全局异常处理

    这篇文章主要介绍了SpringBoot使用@ControllerAdvice全局异常处理,异常处理是非常重要的一部分,它可以帮助我们捕获并处理应用程序中出现的异常情况,提高应用程序的健壮性和可靠性,需要的朋友可以参考下
    2023-07-07
  • SpringBoot中项目如何读取外置logback配置文件

    SpringBoot中项目如何读取外置logback配置文件

    这篇文章主要介绍了SpringBoot中项目如何读取外置logback配置文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • java: 程序包com.fasterxml.jackson.annotation不存在的解决办法

    java: 程序包com.fasterxml.jackson.annotation不存在的解决办法

    当我们在导入程序之后,系统给出错误提示:java: 程序包com.fasterxml.jackson.annotation不存在,本文主要介绍了Java程序包不存在的三种解决方法,需要的朋友可以参考下
    2024-02-02
  • Java实现加盐算法的两种方法

    Java实现加盐算法的两种方法

    数据安全是一个重要的问题,本文主要介绍了Java实现加盐算法的两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • jtds1.1连接sqlserver2000测试示例

    jtds1.1连接sqlserver2000测试示例

    这篇文章主要介绍了jtds1.1连接sqlserver2000测试示例,需要的朋友可以参考下
    2014-02-02
  • 深度剖析java动态静态代理原理源码

    深度剖析java动态静态代理原理源码

    这篇文章主要介绍了深度剖析java动态静态代理原理源码,关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。,需要的朋友可以参考下
    2019-06-06

最新评论