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();
    }
}
相关推荐
计算机毕设vx_bysj68692 小时前
【免费领源码】77196基于java的手机银行app管理系统的设计与实现 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化
java·mysql·智能手机·课程设计
吴声子夜歌2 小时前
ES6——正则的扩展详解
前端·mysql·es6
xixingzhe22 小时前
Mysql统计空间增量
数据库·mysql
程序员萌萌2 小时前
Java之mysql实战讲解(三):聚簇索引与非聚簇索引
java·mysql·聚簇索引
cozil3 小时前
记录mysql创建数据库未指定字符集引发的问题及解决方法
数据库·mysql
AC赳赳老秦3 小时前
OpenClaw数据库高效操作指南:MySQL/PostgreSQL批量处理与数据迁移实战
大数据·数据库·mysql·elasticsearch·postgresql·deepseek·openclaw
ego.iblacat4 小时前
Python 连接 MySQL 数据库
数据库·python·mysql
宠友信息4 小时前
一套基于uniapp+springboot完整社区系统是如何实现的?友猫社区源码级功能解析
java·spring boot·后端·微服务·微信·uni-app
阿丰资源6 小时前
SpringBoot+MySQL+MyBatis-Plus+Vue前后端分离仓库管理系统 (附资料)
spring boot·mysql·mybatis
全栈开发圈6 小时前
新书速览|从零开始学Spring Cloud微服务架构
spring cloud·微服务·架构