SpringBoot2.6.3集成quartz的方式

 更新时间:2022年02月18日 11:29:38   作者:诺浅  
quartz是java里头定时任务的经典开源实现,这里讲述一下如何在SpringBoot2.6.3集成quartz,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

quartz使用

quartz启动需要数据库有很多表的支持,这些表的建表脚本可以通过如下方式找到

如何找到quartz的数据库脚本
在这里下载,需要注意的是下载2.2.3这个版本,不知道为什么高版本的反而没有,真是佛了

集成Springboot

代码
yml配置

spring:
  application:
    name: demo-excel
  datasource:
    url: jdbc:mysql://rm-xxx.mysql.rds.aliyuncs.com:3306/quartz_demo?zeroDateTimeBehavior=convertToNull
    password: quartz_demo
    username: quartz_demo
    driver-class-name: com.mysql.cj.jdbc.Driver
    name: datasource1
  quartz:
    # quartz任务存储类型:jdbc或memory
    job-store-type: jdbc
    # 关闭时等待任务完成
    wait-for-jobs-to-complete-on-shutdown: true
    # 可以覆盖已有的任务
    overwrite-existing-jobs: true
    properties:
      org:
        quartz:
          scheduler:
            # 调度器实例名称
            instanceName: scheduler
            # 调度器实例ID自动生成
            instanceId: AUTO
          jobStore:
            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            # quartz相关表前缀
            tablePrefix: QRTZ_
            useProperties: false
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool
            # 设置并发线程数量
            threadCount: 10
            # 指定线程优先级
            threadPriority: 5
            threadsInheritContextClassLoaderOfInitializingThread: true
server:
  port: 8190
mybatis-plus:
  mapper-locations: classpath*:/mapperxml/*.xml

实现一个最简单的任务,该任务输出1111

@Component
public class TestJob extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext)
            throws JobExecutionException {
        // 任务的具体逻辑
        System.out.println(1111);
    }
}

配置这个任务的执行计划

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail jobDetail() {
        JobDetail jobDetail = JobBuilder.newJob(TestJob.class)
                .withIdentity("test", "test")
                .storeDurably()
                .build();
        return jobDetail;
    }
    public Trigger trigger() {
        Trigger trigger = TriggerBuilder.newTrigger()
                .forJob(jobDetail())
                .startNow()
                .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
        return trigger;
}

启动任务会看到控制台每秒钟打印一次1111

进阶

上诉任务是配置在代码中,那么如果我们想把任务配置数据库中,这样我们就可以做一个定时任务的维护页面,可以对定时任务的触发规则修改,及修改删除定时任务应该怎么做呢?

先定义一张存储定时任务的表

-- auto-generated definition
create table sys_job
(
    id              bigint                  not null primary key,
    job_name        varchar(64)             not null comment '任务名称',
    job_group       varchar(64)             not null comment '任务组名',
    method_name     varchar(500)            null comment '任务方法',
    method_params   varchar(50)             null comment '方法参数',
    cron_expression varchar(255)            null comment 'cron执行表达式',
    misfire_policy  varchar(20) default '3' null comment '计划执行错误策略(1立即执行 2执行一次 3放弃执行)',
    concurrent      char        default '1' null comment '是否并发执行(0允许 1禁止)',
    status          char        default '0' null comment '状态(0正常 1暂停)',
    create_by       varchar(64)             null comment '创建者',
    create_time     datetime                null comment '创建时间',
    update_by       varchar(64)             null comment '更新者',
    update_time     datetime                null comment '更新时间',
    remark          varchar(500)            null comment '备注信息'
)
    comment '定时任务调度表';

插入一条数据

INSERT INTO quartz_demo.sys_job (id, job_name, job_group, method_name, method_params, cron_expression, misfire_policy, concurrent, status, create_by, create_time, update_by, update_time, remark) VALUES (1, 'testJob2', 'test2', 'exec', null, '* * * * * ?', '2', '1', '0', null, null, null, null, null);

同时定义一张执行结果记录表

-- auto-generated definition
create table sys_job_log
(
    job_log_id     int auto_increment comment '任务日志ID'
        primary key,
    job_name       varchar(64)      not null comment '任务名称',
    job_group      varchar(64)      not null comment '任务组名',
    method_name    varchar(500)     null comment '任务方法',
    method_params  varchar(50)      null comment '方法参数',
    job_message    varchar(500)     null comment '日志信息',
    status         char default '0' null comment '执行状态(0正常 1失败)',
    exception_info varchar(2000)    null comment '异常信息',
    create_time    datetime         null comment '创建时间'
)
    comment '定时任务调度日志表';

项目启动时读取这张表里的数据放到quartz中执行
由于代码太多了,这边就不列出来代码了,demo已经上传到GitHub,项目基于springboot、mybatisplus。启动加载任务的代码在com.bxoon.service.impl.SysJobServiceImpl

到此这篇关于SpringBoot2.6.3集成quartz的文章就介绍到这了,更多相关SpringBoot集成quartz内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mybatis基于TypeHandler实现敏感数据加密

    Mybatis基于TypeHandler实现敏感数据加密

    业务场景中经常会遇到诸如用户手机号,身份证号,银行卡号,邮箱,地址,密码等等信息,属于敏感信息,本文就来介绍一下Mybatis基于TypeHandler实现敏感数据加密,感兴趣的可以了解一下
    2023-10-10
  • Kotlin中 StateFlow 或 SharedFlow 的区别解析

    Kotlin中 StateFlow 或 SharedFlow 的区别解析

    Kotlin协程中的StateFlow和SharedFlow是响应式数据流,分别用于UI状态管理和事件通知,StateFlow有初始值,只保留最新值,适用于UI状态管理;SharedFlow没有初始值,可以配置缓存大小,适用于事件通知,感兴趣的朋友一起看看吧
    2025-03-03
  • java并发无锁多线程单线程示例详解

    java并发无锁多线程单线程示例详解

    这篇文章主要为大家介绍了java并发无锁多线程单线程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 使用Java第三方实现发送短信功能

    使用Java第三方实现发送短信功能

    这篇文章主要介绍了使用Java第三方实现发送短信功能,在一些开发中,经常需要有给用户发送短信接收验证码的功能,那么在Java中该如何实现呢,今天我们就一起来看一看
    2023-03-03
  • Mybatis逆工程的使用

    Mybatis逆工程的使用

    最近在学Mybatis,类似Hibernate,Mybatis也有逆工程可以直接生成代码(mapping,xml,pojo),方便快速开发。这篇文章给大家介绍Mybatis逆工程的使用相关知识,感兴趣的朋友一起看下吧
    2016-06-06
  • Java基础第五篇 实施接口

    Java基础第五篇 实施接口

    在public和private的封装机制,我们实际上同时定义了类和接口,类和接口混合在一起。Java还提供了interface这一语法。这一语法将接口从类的具体定义中剥离出来,构成一个独立的主体,下面文章内容将为大家做详细介绍
    2021-09-09
  • 大厂面试常考:快速排序冒泡排序算法

    大厂面试常考:快速排序冒泡排序算法

    快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像BAT、字节、美团等知名IT公司都喜欢考查快速排序原理和手写源码
    2021-08-08
  • java 正则表达式获取两个字符中间的字符串方法

    java 正则表达式获取两个字符中间的字符串方法

    今天小编就为大家分享一篇java 正则表达式获取两个字符中间的字符串方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Java的MyBatis框架中Mapper映射配置的使用及原理解析

    Java的MyBatis框架中Mapper映射配置的使用及原理解析

    Mapper用于映射SQL语句,可以说是MyBatis操作数据库的核心特性之一,这里我们来讨论Java的MyBatis框架中Mapper映射配置的使用及原理解析,包括对mapper的xml配置文件的读取流程解读.
    2016-06-06
  • RocketMQ Broker实现高可用高并发的消息中转服务

    RocketMQ Broker实现高可用高并发的消息中转服务

    RocketMQ消息代理(Broker)是一种高可用、高并发的消息中转服务,能够接收并存储生产者发送的消息,并将消息发送给消费者。它具有多种消息存储模式和消息传递模式,支持水平扩展和故障转移等特性,可以为分布式应用提供可靠的消息传递服务
    2023-04-04

最新评论