Quartz---Springboot项目整合Quartz---实现内存、数据库持久化

这篇具有很好参考价值的文章主要介绍了Quartz---Springboot项目整合Quartz---实现内存、数据库持久化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.SpringBoot整合Quartz使用内存持久化

1.1.什么是内存持久化

Quartz的内存持久化是指Quartz框架在默认情况下将任务调度的运行信息保存在内存中。这种方式的优点是可以提供最佳的性能,因为内存中数据访问最快。然而,内存持久化的缺点是缺乏数据的持久性。当程序停止或系统崩溃时,所有运行的信息都会丢失。

1.2.步骤如下
1.2.1. 添加依赖


首先,在pom.xml文件中添加Quartz的依赖项。


<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-quartz</artifactId>  
</dependency>


 

1.2.2. 创建Job类


实现org.quartz.Job接口或org.quartz.StatefulJob接口,并覆盖execute方法。


import org.quartz.Job;  
import org.quartz.JobExecutionContext;  
import org.quartz.JobExecutionException;  
  
public class MyJob implements Job {  
    @Override  
    public void execute(JobExecutionContext context) throws JobExecutionException {  
        // 执行作业逻辑  
    }  
}
1.2.3. 创建JobDetail和Trigger


使用JobBuilder和TriggerBuilder来创建JobDetail和Trigger实例,并通过调度器将它们关联起来。


import org.quartz.*;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
  
@Configuration  
public class QuartzConfig {  
    //创建JobDetailr实例
    @Bean  
    public JobDetail myJobDetail() {  
        return JobBuilder.newJob(MyJob.class)  
                .withIdentity("myJob", "group1")  
                .storeDurably()  
                .build();  
    }  
    //创建调度器和Trigge并管理jobDetail
    @Bean  
    public Trigger myTrigger() {  
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()  
                .withIntervalInSeconds(5)  //每5秒执行一次任务
                .repeatForever();  
  
        return TriggerBuilder.newTrigger()  
                .forJob(myJobDetail())  
                .withIdentity("myTrigger", "group1")  
                .withSchedule(scheduleBuilder)  
                .build();  
    }  
}
1.2.4. 启动应用


运行你的Spring Boot应用,Quartz将会根据配置自动启动,并按照你定义的Trigger来触发并执行作业。

1.2.实例

定时执行任务,查找数据库中预约时间过期的数据并将车位状态实时更新。

1.2.1数据库数据说明

预约记录表单

Quartz---Springboot项目整合Quartz---实现内存、数据库持久化,spring boot,java,后端,Quartz

车位表单中的id作为预约表单的外键

Quartz---Springboot项目整合Quartz---实现内存、数据库持久化,spring boot,java,后端,Quartz

1.2.2.关键代码

对job类进行修改

package com.duhong.quartz;

import com.duhong.entity.OrderParking;
import com.duhong.service.OrderService;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.batch.BatchProperties;
import org.springframework.boot.autoconfigure.quartz.QuartzDataSource;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class UpdateJob implements Job {
    @Autowired
    OrderService orderService;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         //查询所有预约记录
        List<OrderParking> orderParkings = orderService.selectRecord();
        for (OrderParking orderParking : orderParkings) {
            System.out.println("作业执行");
            System.out.println("到期时间"+orderParking.getDeadtime());
            System.out.println("当前时间"+LocalDateTime.now());
            //未到预约时间
            if(orderParking.getDeadtime().isBefore( LocalDateTime.now())){
                //更新车位状态
                orderService.updateInitStatus(orderParking.getId());
                System.out.println("更新成功");
            }else{
                System.out.println("未到预约时间");
            }
        }
    }
}
1.2.3.执行结果

Quartz---Springboot项目整合Quartz---实现内存、数据库持久化,spring boot,java,后端,Quartz

Quartz---Springboot项目整合Quartz---实现内存、数据库持久化,spring boot,java,后端,Quartz

2.SpringBoot整合Quartz使用mysql持久化

2.1.为啥要使用数据库持久化

Quartz 是一个开源的任务调度框架,用于在 Java 应用中执行定时任务。Quartz 本身不直接提供任务持久化的功能,但它支持将任务、触发器和其他相关信息存储到数据库中,以便在应用程序重启或服务器崩溃后恢复。

选择 MySQL 作为 Quartz 的持久化存储有以下几个原因:

  1. 通用性和普及性:MySQL 是一个广泛使用的开源关系型数据库管理系统,具有很高的通用性和普及性。很多开发者和团队都熟悉 MySQL,因此选择 MySQL 作为 Quartz 的持久化存储可以简化开发和维护过程。
  2. 稳定性和可靠性:MySQL 是一个成熟、稳定且经过广泛验证的数据库系统。它提供了良好的数据完整性和可靠性保证,可以确保 Quartz 任务调度的准确性和一致性。
  3. 性能优化:MySQL 在处理大量数据和复杂查询方面表现出色。通过合理的索引和查询优化,可以确保 Quartz 在持久化任务时具有良好的性能表现。
  4. 社区支持和资源:由于 MySQL 的广泛使用和开源性质,它拥有庞大的用户社区和丰富的资源。这意味着在遇到问题时,可以更容易地找到解决方案或获得帮助。
  5. 扩展性和灵活性:MySQL 支持多种存储引擎和配置选项,可以根据实际需求进行灵活的配置和扩展。这使得它成为一个适合各种规模应用程序的持久化存储选择。

2.2.持久化步骤

基于对quartz使用内存持久化,我们只需添加数据库表及修改properities文件即可

2.2.1.添加数据库表
create table if not exists parking_place
(
   id int auto_increment
      primary key,
   location varchar(255) null,
   status int default 0 null,
   price double null,
   type varchar(255) null
);

create table if not exists qrtz_calendars
(
   SCHED_NAME varchar(120) not null,
   CALENDAR_NAME varchar(190) not null,
   CALENDAR blob not null,
   primary key (SCHED_NAME, CALENDAR_NAME)
);

create table if not exists qrtz_fired_triggers
(
   SCHED_NAME varchar(120) not null,
   ENTRY_ID varchar(95) not null,
   TRIGGER_NAME varchar(190) not null,
   TRIGGER_GROUP varchar(190) not null,
   INSTANCE_NAME varchar(190) not null,
   FIRED_TIME bigint(13) not null,
   SCHED_TIME bigint(13) not null,
   PRIORITY int not null,
   STATE varchar(16) not null,
   JOB_NAME varchar(190) null,
   JOB_GROUP varchar(190) null,
   IS_NONCONCURRENT varchar(1) null,
   REQUESTS_RECOVERY varchar(1) null,
   primary key (SCHED_NAME, ENTRY_ID)
);

create index IDX_QRTZ_FT_INST_JOB_REQ_RCVRY
   on qrtz_fired_triggers (SCHED_NAME, INSTANCE_NAME, REQUESTS_RECOVERY);

create index IDX_QRTZ_FT_JG
   on qrtz_fired_triggers (SCHED_NAME, JOB_GROUP);

create index IDX_QRTZ_FT_J_G
   on qrtz_fired_triggers (SCHED_NAME, JOB_NAME, JOB_GROUP);

create index IDX_QRTZ_FT_TG
   on qrtz_fired_triggers (SCHED_NAME, TRIGGER_GROUP);

create index IDX_QRTZ_FT_TRIG_INST_NAME
   on qrtz_fired_triggers (SCHED_NAME, INSTANCE_NAME);

create index IDX_QRTZ_FT_T_G
   on qrtz_fired_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP);

create table if not exists qrtz_job_details
(
   SCHED_NAME varchar(120) not null,
   JOB_NAME varchar(190) not null,
   JOB_GROUP varchar(190) not null,
   DESCRIPTION varchar(250) null,
   JOB_CLASS_NAME varchar(250) not null,
   IS_DURABLE varchar(1) not null,
   IS_NONCONCURRENT varchar(1) not null,
   IS_UPDATE_DATA varchar(1) not null,
   REQUESTS_RECOVERY varchar(1) not null,
   JOB_DATA blob null,
   primary key (SCHED_NAME, JOB_NAME, JOB_GROUP)
);

create index IDX_QRTZ_J_GRP
   on qrtz_job_details (SCHED_NAME, JOB_GROUP);

create index IDX_QRTZ_J_REQ_RECOVERY
   on qrtz_job_details (SCHED_NAME, REQUESTS_RECOVERY);

create table if not exists qrtz_locks
(
   SCHED_NAME varchar(120) not null,
   LOCK_NAME varchar(40) not null,
   primary key (SCHED_NAME, LOCK_NAME)
);

create table if not exists qrtz_paused_trigger_grps
(
   SCHED_NAME varchar(120) not null,
   TRIGGER_GROUP varchar(190) not null,
   primary key (SCHED_NAME, TRIGGER_GROUP)
);

create table if not exists qrtz_scheduler_state
(
   SCHED_NAME varchar(120) not null,
   INSTANCE_NAME varchar(190) not null,
   LAST_CHECKIN_TIME bigint(13) not null,
   CHECKIN_INTERVAL bigint(13) not null,
   primary key (SCHED_NAME, INSTANCE_NAME)
);

create table if not exists qrtz_triggers
(
   SCHED_NAME varchar(120) not null,
   TRIGGER_NAME varchar(190) not null,
   TRIGGER_GROUP varchar(190) not null,
   JOB_NAME varchar(190) not null,
   JOB_GROUP varchar(190) not null,
   DESCRIPTION varchar(250) null,
   NEXT_FIRE_TIME bigint(13) null,
   PREV_FIRE_TIME bigint(13) null,
   PRIORITY int null,
   TRIGGER_STATE varchar(16) not null,
   TRIGGER_TYPE varchar(8) not null,
   START_TIME bigint(13) not null,
   END_TIME bigint(13) null,
   CALENDAR_NAME varchar(190) null,
   MISFIRE_INSTR smallint(2) null,
   JOB_DATA blob null,
   primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
   constraint qrtz_triggers_ibfk_1
      foreign key (SCHED_NAME, JOB_NAME, JOB_GROUP) references qrtz_job_details (SCHED_NAME, JOB_NAME, JOB_GROUP)
);

create table if not exists qrtz_blob_triggers
(
   SCHED_NAME varchar(120) not null,
   TRIGGER_NAME varchar(190) not null,
   TRIGGER_GROUP varchar(190) not null,
   BLOB_DATA blob null,
   primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
   constraint qrtz_blob_triggers_ibfk_1
      foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references qrtz_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
);

create index SCHED_NAME
   on qrtz_blob_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP);

create table if not exists qrtz_cron_triggers
(
   SCHED_NAME varchar(120) not null,
   TRIGGER_NAME varchar(190) not null,
   TRIGGER_GROUP varchar(190) not null,
   CRON_EXPRESSION varchar(120) not null,
   TIME_ZONE_ID varchar(80) null,
   primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
   constraint qrtz_cron_triggers_ibfk_1
      foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references qrtz_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
);

create table if not exists qrtz_simple_triggers
(
   SCHED_NAME varchar(120) not null,
   TRIGGER_NAME varchar(190) not null,
   TRIGGER_GROUP varchar(190) not null,
   REPEAT_COUNT bigint(7) not null,
   REPEAT_INTERVAL bigint(12) not null,
   TIMES_TRIGGERED bigint(10) not null,
   primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
   constraint qrtz_simple_triggers_ibfk_1
      foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references qrtz_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
);

create table if not exists qrtz_simprop_triggers
(
   SCHED_NAME varchar(120) not null,
   TRIGGER_NAME varchar(190) not null,
   TRIGGER_GROUP varchar(190) not null,
   STR_PROP_1 varchar(512) null,
   STR_PROP_2 varchar(512) null,
   STR_PROP_3 varchar(512) null,
   INT_PROP_1 int null,
   INT_PROP_2 int null,
   LONG_PROP_1 bigint null,
   LONG_PROP_2 bigint null,
   DEC_PROP_1 decimal(13,4) null,
   DEC_PROP_2 decimal(13,4) null,
   BOOL_PROP_1 varchar(1) null,
   BOOL_PROP_2 varchar(1) null,
   primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
   constraint qrtz_simprop_triggers_ibfk_1
      foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references qrtz_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
);

create index IDX_QRTZ_T_C
   on qrtz_triggers (SCHED_NAME, CALENDAR_NAME);

create index IDX_QRTZ_T_G
   on qrtz_triggers (SCHED_NAME, TRIGGER_GROUP);

create index IDX_QRTZ_T_J
   on qrtz_triggers (SCHED_NAME, JOB_NAME, JOB_GROUP);

create index IDX_QRTZ_T_JG
   on qrtz_triggers (SCHED_NAME, JOB_GROUP);

create index IDX_QRTZ_T_NEXT_FIRE_TIME
   on qrtz_triggers (SCHED_NAME, NEXT_FIRE_TIME);

create index IDX_QRTZ_T_NFT_MISFIRE
   on qrtz_triggers (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME);

create index IDX_QRTZ_T_NFT_ST
   on qrtz_triggers (SCHED_NAME, TRIGGER_STATE, NEXT_FIRE_TIME);

create index IDX_QRTZ_T_NFT_ST_MISFIRE
   on qrtz_triggers (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_STATE);

create index IDX_QRTZ_T_NFT_ST_MISFIRE_GRP
   on qrtz_triggers (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_GROUP, TRIGGER_STATE);

create index IDX_QRTZ_T_N_G_STATE
   on qrtz_triggers (SCHED_NAME, TRIGGER_GROUP, TRIGGER_STATE);

create index IDX_QRTZ_T_N_STATE
   on qrtz_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, TRIGGER_STATE);

create index IDX_QRTZ_T_STATE
   on qrtz_triggers (SCHED_NAME, TRIGGER_STATE);
2.2.2.持久化配置
quartz:
  # 将任务等保存化到数据库
  job-store-type: jdbc
  # 程序结束时会等待quartz相关的内容结束
  wait-for-jobs-to-complete-on-shutdown: true
  overwrite-existing-jobs: true
  properties:
    org:
      quartz:
        scheduler:
          # scheduler的实例名
          instanceName: scheduler
          #auto:自动生成唯一值
          instanceId: AUTO
        # 持久化相关
        jobStore:
          # 升级 springboot 版本,注释 class 属性
          # class: org.quartz.impl.jdbcjobstore.JobStoreTX
          # 数据库类型
          driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
          # 表示数据库表名前缀
          tablePrefix: QRTZ_
          useProperties: false
        # 线程池相关
        threadPool:
          class: org.quartz.simpl.SimpleThreadPool
          # 线程数
          threadCount: 10
          # 线程优先级
          threadPriority: 5
          threadsInheritContextClassLoaderOfInitializingThread: true
2.2.3.重启实例,持久化成功

Quartz---Springboot项目整合Quartz---实现内存、数据库持久化,spring boot,java,后端,Quartz文章来源地址https://www.toymoban.com/news/detail-831972.html

到了这里,关于Quartz---Springboot项目整合Quartz---实现内存、数据库持久化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot+redis+mysql+quartz-通过Java操作jedis使用pipeline获取缓存数据定时更新数据库

    代码讲解:6-点赞功能-定时持久化到数据库-pipeline+lua-优化pipeline_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1yP411C7dr 代码: blogLike_schedule/like06 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee.com/flowers-bloom-is-the-sea/XinQiUtilsOrDemo/tree/master/blogLike_schedule/like06 数据库表的

    2024年02月16日
    浏览(48)
  • Springboot 整合Quartz

    关于定时任务,相关的技术文档,技术点也是非常的多,比如:ScheduledExecutorService,基于注解的@Scheduled,还有更多基础的实现,针对于单体服务这些都是可以正常使用的,配置简单,操作便捷,但是针对大型项目在分布式的大环境下,这些定时技术是不支持分布式的,会导致

    2024年02月09日
    浏览(39)
  • springboot+redis+mysql+quartz-通过Java操作redis的KEYS*命令获取缓存数据定时更新数据库

    代码讲解: 3-点赞功能-定时持久化到数据库(pipeline+lua)-完善过程2_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1w14y1o7BV 本文章代码: blogLike_schedule/like03 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee.com/flowers-bloom-is-the-sea/XinQiUtilsOrDemo/tree/master/blogLike_schedule/like03 数据

    2024年02月15日
    浏览(52)
  • springboot+redis+mysql+quartz-通过Java操作jedis定时使用lua脚本获取缓存数据并更新数据库

    springboot+redis+mysql+quartz-通过Java操作jedis定时使用lua脚本获取缓存数据并更新数据库 代码讲解:7.1点赞功能-定时持久化到数据库-Java整合lua_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1ZX4y1H7JT/ 代码: blogLike_schedule/like07 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee

    2024年02月13日
    浏览(55)
  • SpringBoot整合定时任务技术Quartz

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ # 一、SpringBoot整合定时任务技术Quartz 🚀Quartz应用场景 Spring Boot整合Quartz的定时任务技术可以应用于许多不同

    2024年02月09日
    浏览(45)
  • 【微服务】springboot整合quartz使用详解

    目录 一、前言 二、quartz介绍 2.1 quartz概述 2.2 quartz优缺点 2.3 quartz核

    2024年02月05日
    浏览(63)
  • 若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz)

    关于若依定时任务的使用可以去看视频默认定时任务的使用 关于springboot整合quartz的整合参考 (150条消息) 定时任务框架Quartz-(一)Quartz入门与Demo搭建_quarzt_是Guava不是瓜娃的博客-CSDN博客 (150条消息) SpringBoot整合Quartz_springboot quartz_桐花思雨的博客-CSDN博客 简单来说,启动一个定任

    2024年02月04日
    浏览(44)
  • SpringBoot整合H2数据库

    H2官网:http://www.h2database.com/ H2是一个Java语言编写的嵌入式数据库,它不受平台的限制,同时H2提供了一个十分方便的web控制台,用于操作和管理数据库内容。H2还提供兼容模式,可以兼容一些主流的数据库,也可以为缓存数据库使用,它具有比较完备的数据库特性,如支cli

    2024年02月16日
    浏览(46)
  • SpringBoot整合达梦数据库

    近期接到了一个需要国产化的项目,用到了达梦数据库,没想到一开始配置就出现了问题,下面把配置给大家粘贴出来,大家少踩点坑。 一、先下载达梦数据库 这是达梦数据库下载链接,达梦数据库没有免费的,个人好像是一年的试用期,具体不太清楚还没开始好好研究。

    2024年02月03日
    浏览(46)
  • Springboot整合Durid-数据库连接池

    一、Springboot使用Durid快速开始 1、 添加依赖 2、添加配置项 (1) durid连接池配置

    2024年02月11日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包