文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot使用Quartz

2023-10-20 11:11

关注

文章目录


前言

为什么需要Quartz

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

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

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

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


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

一、什么是Quartz

quartz:石英钟的意思

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

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

由OpenSymphony开源组织开发

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

二、使用Quartz

1.Quartz核心组件

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

任务:job

触发器:Trigger

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

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

2.Cron表达式

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

0 0 4 3 9 ? 2022

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯