我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot使用Quartz

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot使用Quartz

文章目录


前言

为什么需要Quartz

所谓"调度"就是制定好的什么时间做什么事情的计划

我们使用过的最简单的调度方法就是Timer

但是Timer的调度功能过于单一,只能是指定时间的延时调用和周期运行

而Quartz可以更详细的指定时间,进行计划调用


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是Quartz

quartz:石英钟的意思

是一个当今市面上流行的高效的任务调度管理工具

所谓"调度"就是制定好的什么时间做什么事情的计划

由OpenSymphony开源组织开发

是java编写的,我们使用时需要导入依赖即可

二、使用Quartz

1.Quartz核心组件

在这里插入图片描述
调度器:Scheduler

任务:job

触发器:Trigger

调度器来配置\计划什么时间触发什么任务

简单来说就是调度器规定什么时间做什么事情

  • job(工作\任务):Quartz 实现过程中是一个接口,接口中有一个方法execute(执行的意思)

    我们创建一个类,实现这个接口,在方法中编写要进行的操作(执行具体任务)

    我们还需要一个JobDetail的类型的对象,Quartz每次执行job时

    会实例化job类型对象,去调用这个方法,JobDetail是用来描述Job实现类的静态信息,

    比如任务运行时在Quartz中的名称

  • Trigger(触发器):能够描述触发指定job的规则,分为简单触发和复杂触发

    简单触发可以使用SimplTrigger实现类.功能类似timer

    复杂触发可以使用CronTrigger实现类,内部利用cron表达式描述各种复杂的时间调度计划

  • Scheduler(调度器):一个可以规定哪个触发器绑定哪个job的容器

    在调度器中保存全部的Quartz 保存的任务

    SpringBoot框架下,添加Quartz依赖后,调度器由SpringBoot管理,我们不需要编写

2.Cron表达式

表示2022年9月3日凌晨4点的cron表达式

0 0 4 3 9 ? 2022

  • * 表示任何值,如果在分的字段上编写*,表示每分钟都会触发

  • , 是个分割符如果秒字段我想20秒和40秒时触发两次就写 20,40

  • - 表示一个区间 秒字段5-10 表示 5,6,7,8,9,10

  • / 表示递增触发 秒字段 5/10表示5秒开始每隔10秒触发一次

    日字段编写1/3表示从每月1日起每隔3天触发一次

  • ? 表示不确定值, 因为我们在定日期时,一般确定日期就不确定是周几,相反确定周几时就不确定日期

  • L 表示last最后的意思,我们可以设置当月的最后一天,就会在日字段用L表示,

    周字段使用L表示最后一周,一般会和1-7的数字组合

    例如6L表示本月最后一周的周五

  • W (work)表示最近的工作日(单纯的周一到周五) 如果日字段编写15W表示

    每月15日最近的工作日触发,如果15日是周六就14日触发,如果15日是周日就16日触发

    LW通常一起使用,表示本月的最后一个工作日

  • # 表示第几个,只能使用在周字段上,6#3表示每月的第三个周五

    如果#后面数字写大了,是一个不存在的日期,那就不运行了

    适合设计在母亲节或父亲节这样的日期运行

    网络上可用的Cron表达式生成器很多

    推荐一个http://cron.ciding.cc/

    未来每年的母亲节(时间9点)

    0 0 9 ? 5 1#2

3.SpringBoot使用Quartz

SpringBoot框架下使用Quartz格式还是非常固定的

我们选用之前学习微服务的项目csmall为例,实现每隔2分钟运行一次添加库存的操作

首先添加依赖

我们选项csmall-stock-webapi模块pom文件

<dependency>    <groupId>org.springframework.bootgroupId>    <artifactId>spring-boot-starter-quartzartifactId>dependency>

先编写要执行的任务

当前项目模块中创建quartz包

包中创建一个QuartzAddStock的类,实现Job接口
代码如下

public class QuartzAddStock implements Job {    @Autowired    private IStockService stockService;        @Override    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {        StockReduceCountDTO countDTO=new StockReduceCountDTO();        countDTO.setCommodityCode("PC100");        countDTO.setReduceCount(-10);        stockService.reduceCommodityCount(countDTO);        System.out.println("定时增加库存完成!");    }}

上面编写的是Job接口的实现类,要想运行还需要将它封装为JobDetail对象保存在Spring容器中

还有要创建一个Trigger设置要运行的时机,也保存到Spring容器中

在quartz包下,再创建一个QuartzConfig类,其中编写它们的调度绑定关系

这个格式是固定的,后面再需要绑定,直接套用即可

// 要配置Quartz的调度器Scheduler// 调度器由SpringBoot管理,所以就变成了配置Spring@Configurationpublic class QuartzConfig {     // 配置的核心是向Spring容器保存一个job和保存一个Trigger    // 创建一个封装Job对象的类型JobDetail    // 使用@Bean注解标记的方法将这个对象保存到Spring容器@Beanpublic JobDetail addStock(){//newJob方法就是在绑定要运行的Job接口实现类,需要实现类的反射做参数    return JobBuilder.newJob(QuartzAddStock.class)    // 给当前JobDetail对象在调度环境中起名            .withIdentity("addStock")            // 即使没有触发器绑定当前JobDetail对象,也不会被删除            .storeDurably()            .build();}// 下面是触发器的声明,也会保存到Spring容器中// 它能够设置job的运行时机@Beanpublic Trigger addStockTrigger(){System.out.println("Trigger保存到Spring容器中");    // 定义Cron表达式    CronScheduleBuilder cron=            CronScheduleBuilder.cronSchedule("0 0/2 * * * ?");    return TriggerBuilder.newTrigger()    // 绑定要运行的JobDetail对象            .forJob(addStock())            // 为触发器起名            .withIdentity("addStockTrigger")            // 绑定cron表达式            .withSchedule(cron)            .build();}}

总结

提示:这里对文章进行总结:

以上就是今天要讲的内容,本文仅仅简单介绍了SpringBoot使用Quartz的基本步骤。

来源地址:https://blog.csdn.net/weixin_43816557/article/details/128135201

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot使用Quartz

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

springboot整合quartz项目使用案例

quartz是一个定时调度的框架,就目前市场上来说,其实有比quartz更优秀的一些定时调度框架,不但性能比quartz好,学习成本更低,而且还提供可视化操作定时任务,这篇文章主要介绍了springboot整合quartz项目使用(含完整代码),需要的朋友可以参考下
2023-05-20

java quartz怎么使用

使用Java Quartz有以下步骤:1. 导入Quartz依赖库,例如在Maven项目中,在pom.xml文件中添加以下依赖:```xmlorg.quartz-schedulerquartz2.3.2```2. 创建一个Job类,实现`o
2023-08-31

在Spring中使用Quartz

在Spring中使用Quartz,需要进行以下步骤:1. 添加依赖:在项目的pom.xml文件中添加Quartz的依赖。```xmlorg.springframework.bootspring-boot-starter-quartz```2
2023-09-15

SpringBoot整合Quartz方法详解

这篇文章详解介绍了SpringBoot整合Quartz的方法,Quartz是一个比较成熟了的定时任务框架,本文实例代码给大家详细讲解,需要的朋友可以参考下
2023-05-17

springboot整合quartz实例分析

这篇文章主要讲解了“springboot整合quartz实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot整合quartz实例分析”吧!一、quartz简介1.Qua
2023-06-29

Quartz在.NET中怎么使用

本篇内容主要讲解“Quartz在.NET中怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Quartz在.NET中怎么使用”吧!一、背景例如需要在某年某月去将数据库的某个数据更新或者同步,
2023-06-25

SpringBoot整合Quartz及异步调用的案例

Quartz是一个完全由java编写的开源作业调度框架、它的简单易用受到业内人士的一致好评,这篇文章主要介绍了SpringBoot整合Quartz及异步调用,需要的朋友可以参考下
2023-03-09

在springboot项目中使用quartz如何实现一个定时任务

今天就跟大家聊聊有关在springboot项目中使用quartz如何实现一个定时任务,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。spring支持多种定时任务的实现。我们来介绍下使用
2023-05-31

如何集合SpringBoot+Quartz+数据库存储

这篇文章主要介绍如何集合SpringBoot+Quartz+数据库存储,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!官网:http://www.quartz-scheduler.org/我们所需数据库pom依赖
2023-06-29

Java中的Quartz如何使用

今天小编给大家分享一下Java中的Quartz如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Scheduler 每次
2023-07-06

Quartz表达式怎么使用

Quartz表达式是一种时间表达式语言,用于配置Quartz调度器的任务调度时间。其基本语法为:[秒] [分钟] [小时] [日] [月] [周] [年]其中,每个字段可以是具体的值、范围、递增步长、通配符或者最后一个特殊字符。以下是一些常
2023-09-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录