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)