Spring Boot应该是目前最火的java开源框架了,它简化了我们创建一个web服务的过程,让我们可以在很短时间、基本零配置就可以启动一个web服务。

定时任务在我们平常的业务开发用的非常多,Spring Boot创建一个定时任务很简单,只需要用@Scheduled注解方法,就可以让方法按照定义的时间进行运行。但是,Spring Boot的@Scheduled默认是单线程的,也就是如果有两个定时任务,那第二个定时必须在第一个定时任务执行完成之后才能开始执行。当然我们可以使用@Async让方法异步,来达到多线程的目的。但是,今天我要讲的是如何重写Spring Boot定时任务,并可支持动态调整执行时间。

1、定义我们需要定时触发的任务方法

实例代码中我们定义了两个需要进行定时触发的任务。并且自定义注解@CronScheduled

2、自定义注解@CronScheduled

自定义注解的作用主要在于后续的逻辑可以获取到该方法的执行周期。同时也可以定义其它的属性,用于后续的业务逻辑处理

3、注册定时任务

标题我们提出了支持可动态调整执行时间。平常的定时任务中我们没法动态调整执行时间,除非重启应用。那我们咋这里怎么动态调整时间呢?思路是:重新注册任务。当我们检测到定时任务的执行时间发生变化,我们就重新注册任务。如果我们的定时任务表达式是配置在数据库,那我们可以定时轮训数据库获取,检测到变化了就重新注册。如果是配置在配种中心,配置中心一般会有触发器trigger。当我们接受配置中心数据发生变化的通知以后,我们重新注册定时任务。

重新注册任务的方法

reReqiester方法可以暴露出去被其它类调用。当外部逻辑检测到定时任务的执行时间发生变化,调用此方法重新注册定时任务

ScheduledTaskRegistrar是Task的一个容器, 内部维护了这些Task List和executor的引用, 并负责将Task置入executor中执行。ScheduledTaskRegistrar的实现原理大家自行研究。这里就不进行详细解释。

实现BeanPostProcessor可以在ScheduleTask对象实例化以后,我们调用自己的逻辑方法。在这里我们用来触发configureTasks方法。

至此,我们就自己实现了定时任务的调度,在调度的过程中,我们也可以加入自己逻辑处理业务。

@scheduled注解配置时间_Java开发重写Spring Boot定时任务,支持可动态调整执行时间...相关推荐

  1. @scheduled注解配置时间_探究 Spring 的定时任务配置

    作者 | 郭朝兴 责编 | Elle 最近在项目开发中进行了一些Spring定时任务的开发工作,在开发过程中对Spring定时任务的配置方式进行了一些研究,现在对各种配置方式进行一个总结.Schedu ...

  2. @scheduled注解配置时间_SpringBoot2.0实战(32)配置定时任务

    定时任务的几种实现方式: Timer:Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行,但不 ...

  3. @scheduled注解配置时间_Spring Boot中使用@Scheduled创建定时任务

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

  4. @scheduled注解配置时间_@Scheduled注解

    1 概述 @Scheduled注解是spring boot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行.注意需要配合@EnableScheduling使用,配 ...

  5. @scheduled注解配置时间_Spring Cloud 之配置服务器(下)配置刷新

    学习目标 本文所讲内容为上一文的后续,我们在上一文中学习了什么是 Spring Cloud 的配置服务器:如何使用两种方式搭建 Spring Cloud Config Server 以及客户端如何连接 ...

  6. @scheduled注解配置时间_「玩转SpringBoot」用好条件相关注解,开启自动配置之门...

    封面图自动配置隐含两层含义,要搞清楚 上帝让程序员的发量减少,是为了让他变得更聪明,如果有一天聪明到了极点,那就是绝顶聪明. 据说在大脑高速运转下,这样更有利于散热,不至于核心温度过高而产生告警. 聪 ...

  7. 从零搭建开发脚手架 Spring Boot集成Mybatis-plus之一

    文章目录 简介 特性 框架结构 依赖集成 依赖 配置 编码 开始使用 核心功能 代码生成器 添加依赖 编码 编写配置 自定义模板引擎 自定义代码模板 自定义属性注入 字段其他信息查询注入 实战总结 常 ...

  8. 后端开发实践——Spring Boot项目模板

    在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为"第0个迭代"要做的事情.但是,当项目运行了一段时间之后再来反 ...

  9. Java开发的Spring Boot的核心模块

    Spring Boot 的核心模块 下面我们大概来了解一下 Spring Boot 的核心模块. 1.spring-boot 这是 Spring Boot 的主模块,也是支持其他模块的核心模块,主要包 ...

最新文章

  1. Android中开发需要的高效助推的命令总结
  2. 【Linux系统编程】快速查找errno错误码信息
  3. 现代操作系统: 第六章 死锁
  4. c#样条曲线命令_如何定制CAD功能区界面中的命令?
  5. NFV和VNF的现状如何
  6. 高倍数泡沫装置PHP_找煤机网:BGP高倍数泡沫灭火装置
  7. linux进程的高级管理,Linux高级程序设计(第2版) PDF扫描版[94MB]
  8. 计算矩阵中全1子矩阵的个数
  9. Java编程思想 (1~10)
  10. java中创建类的时候有没有分配内存,你必须了解的java内存管理机制(一)-内存分配...
  11. keil spi 调试_单片机软件出问题了?有经验的工程师这么调试
  12. android 页面icon拉伸_页面转场: 忽略它可能会使你犯错
  13. android 自动打开qq,qq自动发消息脚本
  14. R400安装Windows2003网卡驱动
  15. 计算机初始化,怎么初始化电脑 电脑要如何初始化教程
  16. 商汤科技——机器视觉面试
  17. opencv 求矩阵的逆
  18. JAVA的诞生及版本
  19. Python OpenCV 值 BUG: all the input arrays must have same number of dimensions
  20. 裂变位法加密 best coder

热门文章

  1. 创建一个dynamics 365 CRM online plugin (三) - PostOperation
  2. 微信公众号开发之微信服务器配置
  3. JAVA遍历21位数
  4. 微信小程序(12)--倒计时
  5. 产品入门一——十分钟读懂产品经理
  6. Tiny210 编译Linux3.0.8
  7. 《CLIP2Video》-腾讯PCG提出CLIP2Video,基于CLIP解决视频文本检索问题,性能SOTA!代码已开源!...
  8. CVPR 2020丨MAML-Tracker: 用目标检测思路做目标跟踪? 小样本即可得高准确率
  9. 上海 · 百度语义分割Pro沙龙,高性能深度学习实战营
  10. 微软沈向洋自述:在实现职业目标的道路上,我得到了七个教训