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();
    }
}
相关推荐
酷酷的崽7981 小时前
CANN 开源生态解析(四):`cann-dist-train` —— 构建高效可扩展的分布式训练引擎
分布式·开源
Volunteer Technology1 小时前
sentinel基本操作
spring cloud·sentinel
Dragon Wu1 小时前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
惊讶的猫2 小时前
AMQP 与 RabbitMQ 四大模型
分布式·rabbitmq
灰子学技术2 小时前
istio从0到1:如何解决分布式配置同步问题
分布式·云原生·istio
小马爱打代码2 小时前
ZooKeeper:入门实战
分布式·zookeeper·云原生
斯普信专业组2 小时前
构建基于MCP的MySQL智能运维平台:从开源服务端到交互式AI助手
运维·mysql·开源·mcp
vx_Biye_Design3 小时前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
Exquisite.3 小时前
Mysql
数据库·mysql
永远都不秃头的程序员(互关)3 小时前
CANN赋能AIGC分布式训练:硬核通信,加速大模型智能生成新纪元
分布式·aigc