学习总结录 学习总结录
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
  • 案例实践

    • 定时任务
      • 定时任务概述
      • Spring Task
        • 配置方式
        • 定时参数
        • corn表达式
        • 参数
        • 案例
      • Quartz
      • xxl-job
      • 扩展
    • 邮件发送
    • 日志管理
    • Word生成
    • 数据导入
    • 验证码
  • 工具使用

  • 项目搭建

  • 服务治理

  • ORM框架

  • MiniSpring

  • 案例归档
  • 案例实践
旭日
2023-03-27
目录

定时任务

# 定时任务概述

定时任务在实际的开发中特别常见,比如电商平台 30 分钟后自动取消未支付的订单,以及凌晨的数据汇总和备份等,都需要借助定时任务来实现。下面通过几个小案例来了解一下定时任务。

定时任务主要有三种实现方式:

  • Timer
  • ScheduledExecutorService
  • Spring Task

本文主要通过第三种方式来实现,且扩展到task-quartz,并简单介绍一下分布式定时任务task-xxl-job。

# Spring Task

# 配置方式

  • 在启动类上使用 @EnableScheduling 开启定时任务功能
  • 新建定时任务类,使用 @Component 注解,让 SpringBoot 为类注册 Bean
  • 在定时任务类中定义定时任务方法,在方法中编写定时任务
  • 在定时任务方法上使用 @Scheduled() 注解,并填入定时参数

# 定时参数

定时任务可以通过注解的方式来配置该定时任务执行的方式。

# corn表达式

@Scheduled(cron="*/6 * * * * ?")
每 6 秒执行一次

# 参数

  • @Scheduled(fixedRate = n):在上次任务开始后 n 毫秒执行下一次任务
  • @Scheduled(fixedDelay = n):在上次任务结束后 n 毫秒执行下一次任务
  • @Scheduled(initialDelay = n1, fixedRate = n2):第一次延迟 n1 后执行,此后按照 fixedRate 的规则定时

# 案例

@SpringBootApplication
@EnableScheduling
public class SpringBootTaskApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootTaskApplication.class, args);
    }

}
@Component
@Slf4j
public class TaskJob {

    private int count = 0;

    @Scheduled(cron="*/6 * * * * ?")
    public void process(){
        System.out.println("this is scheduler task runing  "+(count++));
    }

    /**
     * 按照标准时间来算,每隔 10s 执行一次
     */
    @Scheduled(cron = "*/10 * * * * ?")
    public void job1() {
        log.info("【job1】开始执行:{}", DateUtil.formatDateTime(new Date()));
    }

    /**
     * 从启动时间开始,间隔 2s 执行
     * 固定间隔时间
     */
    @Scheduled(fixedRate = 2000)
    public void job2() {
        log.info("【job2】开始执行:{}", DateUtil.formatDateTime(new Date()));
    }

    /**
     * 从启动时间开始,延迟 5s 后间隔 4s 执行
     * 固定等待时间
     */
    @Scheduled(fixedDelay = 4000, initialDelay = 5000)
    public void job3() {
        log.info("【job3】开始执行:{}", DateUtil.formatDateTime(new Date()));
    }
}

image-20211209193223100

# Quartz

上面定时任务的方式我们很容易发现一个弊端,那就是这个定时任务开启了,我们不能暂停或者终止它,甚至当我们需要去查询所有在运行的定时任务的时候会非常不方便。无法动态对定时任务进行增删改查是上面一种方式的很大的弊端。

下面演示一下Spring Boot 集成 Quartz 定时任务,并实现对定时任务的管理,包括新增定时任务,删除定时任务,暂停定时任务,恢复定时任务,修改定时任务启动时间,以及定时任务列表查询。

具体实现请参考:

https://github.com/xkcoding/spring-boot-demo/tree/master/demo-task-quartz

# xxl-job

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

具体实现请参考:

https://github.com/xkcoding/spring-boot-demo/tree/master/demo-task-xxl-job

https://github.com/xuxueli/xxl-job

# 扩展

一款可视化的定时任务管理平台:

https://github.com/len

上次更新: 2024/06/29, 15:13:44
邮件发送

邮件发送→

最近更新
01
基础概念
10-31
02
Pytorch
10-30
03
Numpy
10-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 旭日 | 蜀ICP备2021000788号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式