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怎么获取当前时间、计算程序运行时间源码详解(超详细!)
有的时候,我们需要查看某一段代码的性能如何,最为简单的方式,可以通过计算该段代码执行的耗时,来进行简单的判断,这篇文章主要给大家介绍了关于Java怎么获取当前时间、计算程序运行时间的相关资料,需要的朋友可以参考下2024-07-07SpringMVC实现controller中获取session的实例代码
本篇文章主要介绍了SpringMVC实现controller中获取session的实例代码,具有一定的参考价值,有兴趣的可以了解一下。2017-02-02IDEA与模拟器安装调试失败的处理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES
这篇文章主要介绍了IDEA与模拟器安装调试失败的处理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-09-09SpringBoot打War包上传到阿里云的LINUX服务器的操作方法
这篇文章主要介绍了SpringBoot打War包上传到阿里云的LINUX服务器,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2020-02-02
最新评论