Spring Cloud微服务搭建二、分布式定时任务Quartz+MySQL接入

目录

简介

简单使用

集群模式


传统的单体应用中,可以使用简单的定时任务框架,但在分布式环境下,需要确保定时任务不会重复执行。

简介

Quartz 是Java定时任务领域的开源框架,由OpenSymphony组织开发,支持复杂任务调度。核心组件包括:

  • ‌Job‌:定义任务逻辑的接口
  • ‌Trigger‌:控制执行时间的触发器
  • ‌Scheduler‌:任务调度容器

支持Cron表达式和SpringBoot集成,

存储模式

RAMJobStore:内存存储,性能高但不支持集群

JDBCJobStore:数据库存储,支持集群和持久化

复制代码
    <!-- Spring Boot Quartz -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-quartz</artifactId>
    </dependency>

简单使用

启动类注解

复制代码
@EnableScheduling

TestTask

复制代码
package com.core.demo.job;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * ceshi
 *
 * @author admin
 * @date 2026/1/8 23:09
 */
@Component
public class TestTask {

    @Scheduled(cron = "0/5 * * * * ?") // 每5秒执行一次
    public void scheduledTask() {
        System.out.println("定时任务执行中...");
    }
}

集群模式

yml配置文件

复制代码
spring:
  quartz:
    # memory, jdbc
    job-store-type: jdbc
    jdbc:
      # always 每次启动都初始化脚本,
      # never 从来都不。
      initialize-schema: never
      # 初始化脚本, 与always合用,使用jar包内置的脚本,或者自己定义
#      schema:
#         - classpath: org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql
    properties:
      org:
        quartz:
          scheduler:
            instanceId: AUTO
            instanceName: Scheduler
          jobStore:
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            # 表前缀
            tablePrefix: qrtz_
            # 启用集群模式,确保多个实例间任务调度的一致性
            isClustered: true
            # 集群检查间隔时间(单位:毫秒)
            clusterCheckinInterval: 20000
            useProperties: true
            # 引用Spring Boot自动配置的数据源:default
            dataSource: jobDb
          dataSource:
            jobDb:
              driver: com.mysql.cj.jdbc.Driver
              URL: jdbc:mysql://127.0.0.1:3306/yscloud?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useInformationSchema=true
              user: root
              password: 123456
              maxConnections: 10
              acquireIncrement: 1

在\org\quartz-scheduler\quartz\2.3.1\quartz-2.3.1.jar!\org\quartz\impl\jdbcjobstore 下有各种sql脚本,这里选择tables_mysql_innodb.sql

TestTask

复制代码
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.springframework.stereotype.Component;

/**
 * ceshi
 *
 * @author admin
 * @date 2026/1/8 23:09
 */
@Component
@Slf4j
public class TestTask implements Job {

    @Override
    public void execute(JobExecutionContext context) {
        log.info("每日任务执行 - {}", System.currentTimeMillis());
    }
}

SchedulerConfig

复制代码
import com.core.demo.job.TestTask;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author admin
 * @date 2026/1/11 20:18
 */
@Configuration
public class SchedulerConfig {

    @Bean
    public JobDetail dailyJobDetail() {
        return JobBuilder.newJob(TestTask.class)
                .withIdentity("testTask", "default")
                .storeDurably(true)
                .build();
    }

    @Bean
    public Trigger dailyJobTrigger() {
        // 每5秒执行一次
        return TriggerBuilder.newTrigger()
                .forJob(dailyJobDetail())
                .withIdentity("dailyJobTrigger", "default")
                .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
                .build();
    }
}
相关推荐
企业数字化笔记8 小时前
业务单据怎样接入流程中心?启动条件、实例关联与失败回退
java·spring boot·mysql
betazhou8 小时前
MySQL Oracle官方备份工具
数据库·mysql·oracle
2501_933923258 小时前
SpringCloud:OpenFeign快速实现
java·后端·spring cloud·openfeign
一万年太久。8 小时前
mysql主从复制
数据库·mysql
Sayai9 小时前
Kafka 跨数据中心日志同步实战:MirrorMaker 2 选型对比 + Flink 中继任务落地(双中心互备与消费者组隔离避坑)
大数据·运维·分布式·flink·kafka·消息队列·高可用
灵晔君9 小时前
【MySQL】库的操作
数据库·mysql
2603_9696948510 小时前
【MySQL学习笔记】DQL(基础查询/条件/聚合/分组/排序/分页)与 DCL(用户权限)全解析
数据库·笔记·学习·mysql·学习方法
pikapika~~~10 小时前
Mysql+Redis八股
数据库·redis·mysql
小此方20 小时前
Re:Mysql数据库基础篇(八):详细讲解复合查询、多表查询、自连接、多行、多列子查询与合并查询
数据库·mysql
smile_life_20 小时前
MySQL 设置 防止账户被暴力破解
数据库·mysql