定时任务相关

定时任务

单机

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); 

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值