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();
    }
}
相关推荐
小北方城市网2 小时前
Spring Cloud Gateway 生产问题排查与性能调优全攻略
redis·分布式·缓存·性能优化·mybatis
【赫兹威客】浩哥2 小时前
【赫兹威客】完全分布式Hadoop测试教程
大数据·hadoop·分布式
一只自律的鸡2 小时前
【MySQL】第八章 数据类型
数据库·mysql
Dobby_052 小时前
【kafka】初学者指南:从零看懂Kafka
分布式·kafka
Gary董2 小时前
Kafka速度快的原因
分布式·kafka
计算机学姐2 小时前
基于SpringBoot的校园跑腿系统【数据可视化统计+原创精品】
java·vue.js·spring boot·后端·mysql·信息可视化·echarts
数据与后端架构提升之路12 小时前
Seata 全景拆解:AT、TCC、Saga 该怎么选?告别“一把梭”的架构误区
分布式·架构
小唐同学爱学习13 小时前
如何解决海量数据存储
java·数据库·spring boot·mysql
小白爱运维14 小时前
MySQL升级8.0.44后登录报错-系统表不支持'MyISAM'存储引擎
数据库·mysql