2019独角兽企业重金招聘Python工程师标准>>>

在Spring Boot项目中,通过@EnableScheduling可启用Spring自带的定时任务支持,在通过@Scheduled注解定义定时任务,但是通过注解只能编写固定时间的定时任务,无法动态调整定时间隔,可通过实现SchedulingConfigurer接口实现动态定时任务注册。

参考代码:

package org.cent.demo.scanner.schedule;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;import java.util.Arrays;
import java.util.List;/*** @author: cent* @email: 292462859@qq.com* @date: 2019/1/16.* @description:*/
@Configuration
@EnableScheduling
@Slf4j
public class DynamicSchedule implements SchedulingConfigurer {/*** 测试数据,实际可从数据库获取*/private List<Task> tasks = Arrays.asList(new Task(1, "任务1", "*/30 * * * * *"),new Task(2, "任务2", "*/30 * * * * *"),new Task(3, "任务3", "*/30 * * * * *"),new Task(4, "任务4", "*/30 * * * * *"),new Task(5, "任务5", "*/30 * * * * *"),new Task(6, "任务6", "*/30 * * * * *"),new Task(7, "任务7", "*/30 * * * * *"),new Task(8, "任务8", "*/30 * * * * *"),new Task(9, "任务9", "*/30 * * * * *"),new Task(10, "任务10", "*/30 * * * * *"));@Overridepublic void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {tasks.forEach(task -> {//任务执行线程Runnable runnable = () -> log.info("execute task {}", task.getId());//任务触发器Trigger trigger = triggerContext -> {//获取定时触发器,这里可以每次从数据库获取最新记录,更新触发器,实现定时间隔的动态调整CronTrigger cronTrigger = new CronTrigger(task.getCron());return cronTrigger.nextExecutionTime(triggerContext);};//注册任务scheduledTaskRegistrar.addTriggerTask(runnable, trigger);});}@Data@AllArgsConstructorstatic class Task {/*** 主键ID*/private int id;/*** 任务名称*/private String name;/*** cron表达式*/private String cron;}
}

转载于:https://my.oschina.net/centychen/blog/3002383

spring boot task实现动态创建定时任务相关推荐

  1. Spring Boot中使用@Scheduled创建定时任务

    我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参数等. 创建定时任务 在Spring Boot中编写定时 ...

  2. Spring boot 实现 Elasticsearch 动态创建索引

    查找了很多方法都是通过Spring EL表达式实现 @Document(IndexName="#{demo.getIndexName}") 这种方式的问题在于没法解决数据库里生成的 ...

  3. Spring Boot 如何解决多个定时任务阻塞问题?

    大家好,我是不才磊哥~ 最近长文撸多了,有点累,今天来点简单的. 今天这篇文章介绍一下Spring Boot 中 如何开启多线程定时任务? 为什么Spring Boot 定时任务是单线程的? 想要解释 ...

  4. Spring Boot集成Quartz动态实现数据库任务

    1. Quartz简介 1.1. 什么是Quartz Quartz是一个开源的任务调度框架.作用是基于定时.定期的策略来执行任务. 它是OpenSymphony开源组织在Job scheduling领 ...

  5. (转)Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean

    转自: Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean - 掘金在阅读SpringBoot源码时,看到SpringBoot中大量使用ImportB ...

  6. Springboot定时任务原理及如何动态创建定时任务

    一.前言 上周工作遇到了一个需求,同步多个省份销号数据,解绑微信粉丝.分省定时将销号数据放到SFTP服务器上,我需要开发定时任务去解析文件.因为是多省份,服务器.文件名规则.数据规则都不一定,所以要做 ...

  7. Spring Boot 入门之登录创建

    Spring Boot 入门之登录创建 一.在IDEA中创建一个springboot项目 1.使用Spring Initializr创建项目 2.选定Developer Tools中的Spring B ...

  8. 在Spring Boot中使用@Scheduled实现定时任务

    2019独角兽企业重金招聘Python工程师标准>>> 在Spring Boot中使用@Scheduled实现定时任务 之前没有使用Spring Boot的Java风格配置的时候,用 ...

  9. spring boot项目中处理Schedule定时任务

    默认,springboot已经支持了定时任务Schedule模块,所以一般情况已经完全能够满足我们的实际需求,一般来说,没有必要在加入其他类似于:quartz 另外,在这里提一个实际项目中,关于定时任 ...

  10. Spring Boot 整合 Quartz 实现 Java 定时任务的动态配置

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 首先说下这次主题,动态配置.没接触过定时任务的同学可以先看 ...

最新文章

  1. 独家 | 2020年22个广泛使用的数据科学与机器学习工具(附链接)
  2. HTML5新增了哪些标签
  3. scala typetag java,scala – 从类型中获取TypeTag?
  4. haddler处理队列 netty_如何实现延迟队列
  5. JavaScript进阶4-学习笔记
  6. spring cloud gateway 网关_微服务网关Spring Cloud Gateway全搞定
  7. 5G技术将加速智能网联汽车产业化进程
  8. 连续出现的字符(信息学奥赛一本通-T1148)
  9. Python编程基础02:Python基本语法
  10. 用汇编的眼光看C++(之嵌入汇编)
  11. JBoss WildFly 7 连接到 ActiveMQ 5.9
  12. 车牌号上的省会简称;uni-app组件,vue组件通用,小程序可模仿
  13. 公司天天开会,是不是浪费生命呢?
  14. [NOI2015]荷马史诗
  15. Flash 101-第1部分:锤子和凿子
  16. Windows 下rsync同步数据报错7456
  17. 对于2019全国高速公路视频联网工作实施方案的理解:视频上云网关与省级视频云平台
  18. 智能数字图像处理:图卷积SGN代码(pytorch)之model.py解读
  19. C#使用S7.net连接西门子S1200PLC,C#直接连接西门子PLC
  20. cj20n sap 报错未知列的名称_sapps操作手册

热门文章

  1. mysql 廖雪峰_讨论 - 廖雪峰的官方网站
  2. 汕尾php培训,系统发生错误
  3. 微信小程序公测了!教你第一时间注册微信小程序
  4. 建立完善的员工晋升机制_员工晋升机制(完)
  5. 图像 理想低通滤波_高通滤波、低通滤波、带通滤波 python实现
  6. window location href 手机端无法跳转_JavaScriptBOM__History_location(二十)
  7. 监督分类空白处也被分类了_如何兼容自训练与预训练:更高效的半监督文本分类模型...
  8. 发布PHP项目_Jenkins发布PHP项目之一自动化部署
  9. python数据结构-列表-1
  10. docker给php装swoole,制作php+swoole的Docker环境