springboot项目使用SchedulingConfigurer实现多个定时任务
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 使用maven创建springboot项目