Spring Boot项目中使用Quartz完成定时任务

都说好记性不如烂笔头,每天写一点,从量变到质变的开始!废话不多说,以下所有内容均来自本人实际操作:

前言:现在项目中定时任务一般都使用Quartz框架,Java虽然提供了Timer类但是一般都不用. Spring Boot整合了Quartz框架,用起来很方便,在此记录一下基本配置和实现.

环境:Windows10+JDK8+Spring Boot+Mysql8+Mybatis-Plus+Quartz

1.Spring Boot项目中引入依赖

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

父项目依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

其他依赖可以根据自己使用习惯,不做重点,可基于开发中的项目 

2.注解方式使用Quartz(主要使用@EnableScheduling和 @Scheduled)

@Slf4j
@EnableScheduling
@Configuration
public class DemoQuartz {

    @Scheduled(cron = " 0/5 * * * * ? ")
    public void myLogic1() {
        log.info("调度任务1开始了");
    }

    @Scheduled(cron = " 0/10 * * * * ? ")
    public void myLogic2() {
        log.info("调度任务2开始了");
    }
}

3.数据库方式使用Quartz(可以动态修改cron表达式/暂停/恢复等操作)

3.1 Mysql数据库中建表

CREATE TABLE demo_quartz_job (
	id VARCHAR(32) PRIMARY KEY COMMENT '主键',
	create_by VARCHAR(32) COMMENT '创建人',
	create_time TIMESTAMP COMMENT '创建时间',
	update_by VARCHAR(32) COMMENT '修改人',
	update_time TIMESTAMP COMMENT '修改时间',
	job_class_name VARCHAR(100) COMMENT '任务类名',
	cron_expression VARCHAR(100) COMMENT 'cron表达式',
	parameter  VARCHAR(100) COMMENT '参数',
	description VARCHAR(100) COMMENT '描述',
	status int(2) COMMENT '状态 0正常-1停止'
) COMMENT = '定时任务表';

3.2 yml配置文件中添加配置

单项目使用配置,不需要创建框架依赖表

spring:
  quartz:
    job-store-type: memory # quartz任务存储类型:jdbc或memory
    wait-for-jobs-to-complete-on-shutdown: true # 关闭时等待任务完成
    overwrite-existing-jobs: true # 可以覆盖已有的任务
    properties: # quartz原生配置
      org:
        quartz:
          scheduler:
            instanceName: scheduler # 调度器实例名称
            instanceId: AUTO # 调度器实例ID自动生成
          jobStore:
            class: org.quartz.simpl.RAMJobStore # RAMJobStore用于存储内存中的调度信息
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool # 指定线程池实现类,对调度器提供固定大小的线程池
            threadCount: 10 # 设置并发线程数量
            threadPriority: 5 # 指定线程优先级

如果要集群配置如下,并且要在数据添加框架依赖表

spring:
  quartz:
    job-store-type: jdbc # quartz任务存储类型:jdbc或memory
    wait-for-jobs-to-complete-on-shutdown: true # 关闭时等待任务完成
    overwrite-existing-jobs: true # 可以覆盖已有的任务
    properties: # quartz原生配置
      org:
        quartz:
          scheduler:
            instanceName: scheduler # 调度器实例名称
            instanceId: AUTO # 调度器实例ID自动生成
          jobStore:
#            class: org.quartz.simpl.RAMJobStore # RAMJobStore用于存储内存中的调度信息
            class: org.quartz.impl.jdbcjobstore.JobStoreTX # 调度信息存储处理类
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate # 使用完全兼容JDBC的驱动
            tablePrefix: QRTZ_ # quartz相关表前缀
            useProperties: false # 是否将JobDataMap中的属性转为字符串存储
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool # 指定线程池实现类,对调度器提供固定大小的线程池
            threadCount: 10 # 设置并发线程数量
            threadPriority: 5 # 指定线程优先级

依赖表脚本

#
# In your Quartz properties file, you'll need to set 
# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#
#
# By: Ron Cordell - roncordell
#  I didn't see this anywhere, so I thought I'd post it here. This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM.

DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
DROP TABLE IF EXISTS QRTZ_LOCKS;
DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_SIMPROP
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值