• 定时任务相关


    定时任务

    单机

    Timer

    ScheduledExecutorService

    • 常用ScheduledThreadPoolExecutor

    Spring Task底层是基于ScheduledThreadPoolExecutor

    时间轮(底层基于数组)

    分布式

    Quartz

    • 优点: 可以与 Spring 集成,并且支持动态添加任务和集群。

    • 缺点 :分布式支持不友好,没有内置 UI 管理控制台、使用麻烦(相比于其他同类型框架来说)

    • 三个组件

      • Schedule调度器

        • 指定频率
      • Trigger触发器

        • 将Job和Schedule绑定在一起
      • Job任务

    • 模式

      • 单机模式

        • Job继成QuartzJobBean,实现 #executeInternal

          • QuartzJobBean 实现了 org.quartz.Job 接口
        • ScheduleConfiguration

          • 配置JobDetail

            • 指定具体的Job
          • 配置Trigger

            • 在Trigger里面配置Schedule
      • 集群模式

        • 在生产环境下,一定一定一定要使用 Quartz 的集群模式,保证定时任务的高可用

        • @DisallowConcurrentExecution 注解

          • 保证相同 JobDetail 在多个 JVM 进程中,有且仅有一个节点在执行
        • 使用 Quartz 的 JDBC 存储器 JobStoreTX ,使用 MySQL 作为数据库

        • yml的quartz相关配置

        • 初始化 Quartz 表结构

        • 创建 quartz 数据源

          • 注意指定BeanName
        • 定时任务配置

          • Bean 自动设置

            • 就是单机那样的设置
          • Scheduler 手动设置(推荐使用)

            • 和单机配置的类似,只是最后添加调度任务scheduler.scheduleJob(jobDetail, trigger),将 JobDetail 和 Trigger 持久化到数据库

    Elastic-Job

    • 当当网开源的一个基于Quartz和ZooKeeper的分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成,一般我们只要使用 Elastic-Job-Lite 就好。

    • 优劣

      • 优点 :可以与 Spring 集成、支持分布式、支持集群、性能不错
      • 缺点 :依赖了额外的中间件比如 Zookeeper(复杂度增加,可靠性降低、维护成本变高)

    XXL-JOB

    • 于 2015 年开源,是一款优秀的轻量级分布式任务调度框架,支持任务可视化管理、弹性扩容缩容、任务失败重试和告警、任务分片等功能,基于数据库

    • 优劣

      • 优点:开箱即用(学习成本比较低)、与 Spring 集成、支持分布式、支持集群、内置了 UI 管理控制台。
      • 缺点:不支持动态添加任务

    PowerJob

    • 分布式任务调度领域的新星

    使用相关

    Spring与Quartz的Cron表达式貌似有区别,在Spring中如下:
    1.cron在Spring中表达式是6位组成,不允许第七位的年份
    2.在周几的的位置,1-7代表周一到周日

    定时任务不阻塞功能

    定时任务不该阻塞。默认是阻塞的
    1)可以让业务以异步的方式,自己提交到线程池:

    CompletableFuture.runAsync(() -> {
                 },execute); 
    
    • 1
    • 2

    2)支持定时任务线程池;设置类TaskSchedulingProperties
    spring.task.scheduling.pool.size: 5(不同版本可能会失效)
    3)让定时任务异步执行异步任务

    总结:使用异步任务 + 定时任务来完成定时任务不阻塞的功能

    建议:重温商城视屏里面的介绍

  • 相关阅读:
    黑豹程序员-架构师学习路线图-百科:JSON替代XML
    LeetCode-对链表进行插入排序
    知识图谱和大语言模型的共存之道
    制作一个简单HTML个人网页网页——人物介绍梵高(HTML+CSS)
    前端三剑客:html、css、javascript
    多智能体进化算法求解带时间窗的VRP问题(python)
    Qt5多线程<12>
    大数据毕业设计选题推荐-无线网络大数据平台-Hadoop-Spark-Hive
    本周Github有趣的项目、工具和库:Radius等
    智能指针作为模板参数并校验是否子类
  • 原文地址:https://blog.csdn.net/qq_40011574/article/details/127273583