econets-vue开发指南 econets-vue开发指南
首页
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • 公众号手册
  • CRM手册
  • 运维手册
GitHub (opens new window)
首页
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • 公众号手册
  • CRM手册
  • 运维手册
GitHub (opens new window)
  • 萌新必读

    • 简介
    • 功能列表
    • 快速启动(后端项目)
    • 快速启动(前端项目)
    • 技术选型
    • 项目结构
    • 代码热加载
    • 一键改包
    • 删除功能
    • 内网穿透
  • 后端手册

    • 新建服务
    • 代码生成【单表】(新增功能)
    • 代码生成【主子表】
    • 代码生成(树表)
    • 功能权限
    • 数据权限
    • 用户体系
    • 三方登录
    • OAuth 2.0(SSO 单点登录)
    • SaaS 多租户【字段隔离】
    • SaaS 多租户【数据库隔离】
    • WebSocket 实时通信
    • 13异常处理(错误码)
    • 参数校验
    • 分页实现
    • 文件存储(上传下载)
    • Excel 导入导出
    • 系统日志
    • MyBatis 数据库
    • MyBatis 联表&分页查询
    • 多数据源(读写分离)
    • Redis 缓存
    • 本地缓存
    • 异步任务
    • 配置管理
    • 工具类 Util
    • 单元测试
    • 分布式锁
    • 幂等性(防重复提交)
    • 数据库文档
    • 验证码
  • 中间件手册

    • 定时任务
      • 1. 如何开启?
      • 2. 实战案例
        • 2.1 引入依赖
        • 2.2 UserSessionTimeoutJob
        • 2.3 配置任务
        • 2.4 测试任务
    • 消息队列(内存)
    • 消息队列(Redis)
    • 消息队列(RocketMQ)
    • 消息队列(RabbitMQ)
    • 消息队列(Kafka)
    • 限流熔断
  • 工作流手册

    • 工作流(Flowable)会签、或签
  • 指南
  • 中间件手册
EcoNets Tech
2024-01-23
目录

定时任务

定时任务的使用场景主要如下:

  • 时间驱动处理场景:每分钟扫描超时支付的订单,活动状态刷新,整点发送优惠券。
  • 批量处理数据:按月批量统计报表数据,批量更新短信状态,实时性要求不高。

项目基于 Quartz + MySQL 实现分布式定时任务,并提供 [基础设施 -> 定时任务] 菜单,进行定时任务的统一管理,支持动态控制任务的添加、修改、开启、暂停、删除、执行一次等操作。

doc_econets_pic_164.png

  • blossom-spring-boot-starter-job (opens new window)技术组件:基于 Quartz 框架的封装,提供简便的 JobHandler (opens new window)接入,任务的执行、重试,执行日志的记录。
  • blossom-module-infra 的 job (opens new window)业务模块,提供任务的动态管理,执行日志的存储。

# 1. 如何开启?

在 application-dev.yaml (opens new window)配置文件中,通过 spring.quartz 配置项,设置 Quartz 使用 MySQL 实现集群。如下图所示:

doc_econets_pic_165.png

考虑到 dev 本地和 test 测试环境使用相同的数据库,如果 dev 也跑定时任务,可能会影响 test 测试环境的执行。所以默认配置下,dev 禁用了定时任务。

重要!!!如果你要开启 dev 的定时任务,可以删除 - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration 那一行即可开启。

# 2. 实战案例

以用户 Session 超时的定时任务举例子,讲解在项目中使用定时任务。

注意,需要修改 application-dev.yaml 配置文件,将 spring.quartz.auto-startup 为 true,开启本地执行定任务的功能。

# 2.1 引入依赖

在 blossom-module-system-biz 模块中,引入 blossom-spring-boot-starter-job 技术组件。如下所示:

<dependency>
    <groupId>cn.econets.boot</groupId>
    <artifactId>blossom-spring-boot-starter-job</artifactId>
</dependency>

# 2.2 UserSessionTimeoutJob

每个 blossom-module-xxx-biz 模块的 job 包,用于定义定时任务的 Job 类。

因此,在 blossom-module-system-biz 模块的 job 包下,创建 UserSessionTimeoutJob (opens new window)类,实现 JobHandler (opens new window)接口,执行用户 Session 超时 Job。如下图所示:

doc_econets_pic_166.png

疑问:为什么添加 @TenantJob 注解?

声明 @TenantJob (opens new window)注解在 Job 类上,实现并行遍历每个租户,执行定时任务的逻辑。

更多多租户的内容,可见 《开发指南 —— SaaS 多租户》 (opens new window)文档。

# 2.3 配置任务

① 点击 [新增] 按钮,填写定时任务 UserSessionTimeoutJob 的信息。如下图所示:

doc_econets_pic_167.png

  • 处理器的名字:对应的 Spring Bean 名字。例如说 UserSessionTimeoutJob 对应 userSessionTimeoutJob
  • Cron 表达式:执行周期,可通过 [生成表达式] 功能,进行生成

doc_econets_pic_168.png

  • 重试次数、重试间隔:执行失败后,立即重试的次数以及重试的间隔时间
  • 超时时间监控:执行超过该时间后,发送告警邮件给开发【暂不支持,未来实现】

常用的 Cron 表达式如下:

0 0 10,14,16 * * ? 每天上午 10 点,下午 2 点、4 点 
0 0/30 9-17 * * ? 朝九晚五工作时间内,每半小时 
0 0 12 ? * WED 表示每个星期三中午 12 点 
0 0 12 * * ? 每天中午 12 点触发 
0 15 10 ? * * 每天上午 10:15 触发 
0 15 10 * * ? 每天上午 10:15 触发 
0 15 10 * * ? * 每天上午 10:15 触发 
0 15 10 * * ? 2005 2005 年的每天上午 10:15 触发 
0 * 14 * * ? 在每天下午 2 点到下午 2:59 期间,每 1 分钟触发 
0 0/5 14 * * ? 在每天下午 2 点到下午 2:55 期间,每 5 分钟触发 
0 0/5 14,18 * * ? 在每天下午 2 点到 2:55 期间和下午 6 点到 6:55 期间,每 5 分钟触发 
0 0-5 14 * * ? 在每天下午 2 点到下午 2:05 期间,每 1 分钟触发 
0 10,44 14 ? 3 WED 每年三月的星期三的下午 2:10 和 2:44 触发 
0 15 10 ? * MON-FRI 周一至周五的上午 10:15 触发 
0 15 10 15 * ? 每月15日上午 10:15 触发 
0 15 10 L * ? 每月最后一日的上午 10:15 触发 
0 15 10 ? * 6L 每月的最后一个星期五上午 10:15 触发 
0 15 10 ? * 6L 2002-2005 2002 年至 2005 年,每月的最后一个星期五上午 10:15 触发 
0 15 10 ? * 6#3 每月的第三个星期五上午 10:15 触发

② 点击 [更多 -> 任务详情] 按钮,可以查看任务的基础信息、后续的执行时间。如下图所示:

doc_econets_pic_169.png

# 2.4 测试任务

① 点击 [更多 -> 执行一次] 按钮,立即执行一次 UserSessionTimeoutJob 定时任务。可以在 IDEA 控制台看到输出,如下图所示:

doc_econets_pic_170.png

② 点击 [更多 -> 调度日志] 按钮,可以查看到 UserSessionTimeoutJob 的执行日志。如下图所示:

doc_econets_pic_171.png

上次更新: 2024/02/18, 14:43:37
验证码
消息队列(内存)

← 验证码 消息队列(内存)→

Theme by Vdoing | Copyright © 2019-2024 EcoNets Tech | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式