springBoot整合quartz定时任务

46 篇文章 5 订阅

声明

Quartz是一种基于java实现的任务调度框架,可以定时自动的执行你想要执行的任何任务。

官网:quartz官网

利用Quartz的定时任务技术可以应用于许多不同的场景,帮助我们实现定时执行任务、数据清理、缓存刷新、邮件发送、数据备份、系统监控与报警、数据分析和报表生成等功能。这些场景都需要定期执行一些重复性或后台的任务,Quartz能够提供灵活而可靠的定时任务调度功能,帮助我们简化开发和管理。

概念

quartz有四大核心概念,分别为:

1 工作(Job )做什么事?:用于定义具体执行的工作,通常写业务处理的地方。
2 工作明细(JobDetail):用于描述定时工作相关的信息
3 触发器(Trigger):用于描述触发工作的规则,通常使用corn表达式定义调度规则
4 工作调度器(Scheduler):描述了工作明细与触发器的对应关系 (什么时候去做?)

一个job可以给多个jobDetail封装,一个jobDetail可以给trigger来配置规则,但是一个trigger只能装配一个jobDetail

引入依赖

直接在pom里面引入依赖

 <!--  quartz定时任务      -->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-quartz</artifactId>
      <version>2.3.2.RELEASE</version>
  </dependency>

引入完之后,哪怕什么也不写,重启项目的时候就会发现控制台已经有quartz相关的日志了

在这里插入图片描述

创建Job

创建一个job类用来定义任务逻辑

在这里面有2个点需要注意
1 该类要继承extends QuartzJobBean抽象类
2 继承完后要实现executeInternal方法,在该方法里面编写逻辑

在这里插入图片描述

代码如下:

package com.quartz.job;

import org.quartz.JobExecutionContext;
import org.springframework.scheduling.quartz.QuartzJobBean;

/**
 * @description: quartz定时任务
 * @author: wyh
 * @date: 2023-11-22 10:04
 **/

/**
 * 1.创建定时任务类 继承QuartzJobBean抽象类,实现其抽象方法executeInternal,在此方法指定具体业务
**/
public class MyQuartzJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) {
        // 业务处理
        System.out.println("Quartz running....");
    }
}

创建QuartzConfig

创建quartz定时任务配置类,在该类里面有两个地方需要处理,分别是任务明细的构造和触发器的构造

该类有3个地方需要注意
1 类不要忘了加@Configuration注解,不然不生效
2 方法上不要忘了加@Bean注解,不然不生效
3 JobBuilder.newJob制定的是具体工作的类
4 TriggerBuilder.newTrigger().forJob制定的是具体明细的方法名,不要忘了加括号,当然不加编译也会报错。

在这里插入图片描述

绑定工作任务并构造任务明细

通过JobDetail绑定对应的job任务

   /**
     * 绑定工作明细
     **/
    @Bean
    public JobDetail jobDetail(){
        // 绑定具体的任务类并调用storeDurably进行持久化,最后build构建 newJob中的参数就是具体的工作类
        return JobBuilder.newJob(MyQuartzJob.class).storeDurably().build();
    }

设置触发频率并构造触发器

通过cron表达式配置执行频率,然后指定工作明细

任务的触发,触发器有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger四种类型,其中SimpleTrigger:能够周期性的设置任务触发;CronTrigger:使用cron表达式的方式实现任务触发,实现更多样,使用场景也是最多的。

cron 表达式在线生成:在线Cron表达式生成器

标题

   /**
     * 创建触发器
     **/
    @Bean
    public Trigger quartzTrigger(){
       // 设置触发频率 参数: 秒 分 时 日 月 星期几(0/x表示x秒执行一次)
        ScheduleBuilder<CronTrigger> scheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ?");
        // 创建触发器并绑定对应的工作明细和频率  forJob指定的是具体的方法名,withSchedule就是上面设置的频率
        return  TriggerBuilder.newTrigger().forJob(jobDetail()).withSchedule(scheduleBuilder).build();
    }

完整代码如下:

package com.quartz.config;

import com.quartz.job.MyQuartzJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @description: quartz定时任务配置类
 * @author: wyh
 * @date: 2023-11-22 10:08
 **/

@Configuration
public class QuartzConfig {
    /**
     * 2.绑定工作明细
     **/
    @Bean
    public JobDetail jobDetail(){
        // 绑定具体的任务类并调用storeDurably进行持久化,最后build构建 newJob中的参数就是具体的工作类
        return JobBuilder.newJob(MyQuartzJob.class).storeDurably().build();
    }
    /**
     * 3.创建触发器
     **/
    @Bean
    public Trigger quartzTrigger(){
       // 设置触发频率 参数: 秒 分 时 日 月 星期几(0/x表示x秒执行一次)
        ScheduleBuilder<CronTrigger> scheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ?");
        // 创建触发器并绑定对应的工作明细和频率  forJob指定的是具体的方法名,withSchedule就是上面设置的频率
        return  TriggerBuilder.newTrigger().forJob(jobDetail()).withSchedule(scheduleBuilder).build();
    }
}

查看效果

启动项目,查看结果。

在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Boot Quartz定时任务是一种在Spring Boot项目中实现定时任务调度的方法。它可以根据设定的时间间隔或者Cron表达式来执行任务。通过引用中提供的源代码和配置文件,可以直接导入Spring Boot项目并配置好数据库即可使用。 为了实现定时任务,需要在项目中创建一个继承自QuartzJobBean的Job类,并重写executeInternal方法。该方法定义了定时任务的具体逻辑,可以在其中执行需要定时执行的业务操作。 另外,还需要创建一个Quartz定时任务的配置类,其中使用@Configuration注解标记为配置类,配置相关的定时任务信息。在该配置类中,可以通过@Bean注解创建JobDetail和Trigger实例,分别定义任务的具体细节和触发器的配置信息。在这个配置类中,我提供了一个示例,用于演示如何配置一个定时任务。 综上所述,Spring Boot Quartz定时任务是一种灵活可靠的定时任务调度方法,可以通过Spring Boot的特性方便地实现任务定时执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot+quartz定时任务实现 纯代码](https://download.csdn.net/download/qq_38971617/12284286)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SpringBoot整合Quartz实现定时任务](https://blog.csdn.net/qq_29305715/article/details/123517569)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小花皮猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值