当前位置: 首页 > news >正文

Spring Boot + MyBatis-Flex 配置 ProxySQL 的完整指南

Spring Boot + MyBatis-Flex 配置 ProxySQL 的完整指南

下面是一个详细的教程,指导您如何在 Spring Boot 项目中使用 MyBatis-Flex 配置 ProxySQL 进行 读写分离主从同步 的数据库访问。


🎯 目标

  1. Spring Boot 中连接 ProxySQL
  2. 使用 MyBatis-Flex 访问数据库。
  3. 配置 读写分离延迟检测

🔧 步骤 1:确保 ProxySQL 和 MySQL 主从同步已正确配置

首先,确保您已经正确配置了 ProxySQLMySQL 主从同步

ProxySQL 的默认配置

Hostgroup ID描述
10主库(写操作)
20从库(读操作)

ProxySQL 的数据端口

  • 端口:6033(默认数据接口端口)

🔧 步骤 2:在 Spring Boot 项目中引入依赖

1️⃣ 引入 MyBatis-Flex 的依赖

pom.xml 中添加以下依赖:

<dependency><groupId>com.mybatisflex</groupId><artifactId>mybatis-flex-spring-boot-starter</artifactId><version>1.4.3</version>
</dependency>

🔧 步骤 3:配置 application.yml

application.yml 文件中配置 ProxySQL 的数据源。

spring:datasource:url: jdbc:mysql://127.0.0.1:6033/db_order_plus?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: rootpassword: rootmybatis-flex:mapper-locations: classpath:mapper/**/*Mapper.xmlconfiguration:map-underscore-to-camel-case: true

🔧 步骤 4:配置数据源的读写分离

ProxySQL 中配置 读写分离规则

在 ProxySQL 管理界面执行以下 SQL

INSERT INTO mysql_query_rules (rule_id, active, match_pattern, destination_hostgroup)
VALUES (1, 1, '^SELECT.*', 20),(2, 1, '^INSERT.*|^UPDATE.*|^DELETE.*', 10);LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

🔧 步骤 5:创建 MyBatis-Flex 的 Mapper 和实体类

1️⃣ 创建实体类

com.example.demo.entity 包中创建一个实体类,例如 Order.java

package com.example.demo.entity;public class Order {private Long id;private String orderName;// Getters and Setters
}

2️⃣ 创建 Mapper 接口

com.example.demo.mapper 包中创建一个 Mapper 接口

package com.example.demo.mapper;import com.example.demo.entity.Order;
import org.apache.ibatis.annotations.Select;public interface OrderMapper {@Select("SELECT * FROM orders WHERE id = #{id}")Order selectOrderById(Long id);
}

3️⃣ 创建 Mapper XML 文件

src/main/resources/mapper 目录下创建 OrderMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.demo.mapper.OrderMapper"><select id="selectOrderById" resultType="com.example.demo.entity.Order">SELECT * FROM orders WHERE id = #{id}</select>
</mapper>

🔧 步骤 6:创建 Service 和 Controller

1️⃣ 创建 Service

com.example.demo.service 包中创建一个 OrderService

package com.example.demo.service;import com.example.demo.entity.Order;
import com.example.demo.mapper.OrderMapper;
import org.springframework.stereotype.Service;@Service
public class OrderService {private final OrderMapper orderMapper;public OrderService(OrderMapper orderMapper) {this.orderMapper = orderMapper;}public Order getOrderById(Long id) {return orderMapper.selectOrderById(id);}
}

2️⃣ 创建 Controller

com.example.demo.controller 包中创建一个 OrderController

package com.example.demo.controller;import com.example.demo.entity.Order;
import com.example.demo.service.OrderService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class OrderController {private final OrderService orderService;public OrderController(OrderService orderService) {this.orderService = orderService;}@GetMapping("/orders/{id}")public Order getOrderById(@PathVariable Long id) {return orderService.getOrderById(id);}
}

🔧 步骤 7:测试读写分离

  1. 启动 Spring Boot 项目
mvn spring-boot:run
  1. 测试写操作(INSERT/UPDATE/DELETE)

通过 Navicat 或其他工具,向数据库执行写操作,确保这些操作路由到 主库

  1. 测试读操作(SELECT)

访问 http://localhost:8080/orders/{id},验证读操作是否路由到 从库


🔧 步骤 8:配置延迟检测

ProxySQL 中启用 延迟检测

SET mysql-monitor_replication_lag_interval_ms = 1000;INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup, check_type, max_replication_lag)
VALUES (10, 20, 'seconds_behind_master', 5);LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

总结

步骤描述
安装 MyBatis-Flex在项目中引入 MyBatis-Flex
配置数据源application.yml 中配置 ProxySQL 的数据源
配置读写分离规则在 ProxySQL 中配置读写分离规则
创建实体类、Mapper、Service、Controller实现数据库访问逻辑
启用延迟检测在 ProxySQL 中启用延迟检测
http://www.lryc.cn/news/521657.html

相关文章:

  • WEB攻防-通用漏洞_XSS跨站_权限维持_捆绑钓鱼_浏览器漏洞
  • 人工智能任务20-利用LSTM和Attention机制相结合模型在交通流量预测中的应用
  • Day04-后端Web基础——Maven基础
  • Hive SQL必刷练习题:留存率问题
  • 虚拟同步机(VSG)Matlab/Simulink仿真模型
  • 单头注意力机制(SHSA)详解
  • 【漏洞分析】DDOS攻防分析
  • JavaScript动态渲染页面爬取之Splash
  • 慧集通(DataLinkX)iPaaS集成平台-系统管理之UI库管理、流程模板
  • OpenCV相机标定与3D重建(59)用于立体相机标定的函数stereoCalibrate()的使用
  • 摄像头模块在狩猎相机中的应用
  • ruoyi-cloud docker启动微服务无法连接nacos,Client not connected, current status:STARTING
  • 代码随想录算法训练营第三十四天-动态规划-63. 不同路径II
  • 在一个sql select中作多个sum并分组
  • 家用电路频繁跳闸的原因及解决方法!
  • 我的年度总结
  • ASP.NET Core 多环境配置
  • docker 安装mongodb
  • 完整地实现了推荐系统的构建、实验和评估过程,为不同推荐算法在同一数据集上的性能比较提供了可重复实验的框架
  • DRV8311三相PWM无刷直流电机驱动器
  • Mysql--运维篇--备份和恢复(逻辑备份,mysqldump,物理备份,热备份,温备份,冷备份,二进制文件备份和恢复等)
  • 机器学习-归一化
  • Linux 串口检查状态的实用方法
  • Qt的核心机制概述
  • 微调神经机器翻译模型全流程
  • Cesium加载地形
  • gitlab runner正常连接 提示 作业挂起中,等待进入队列 解决办法
  • C#对动态加载的DLL进行依赖注入,并对DLL注入服务
  • HDMI接口
  • A/B 测试:玩转假设检验、t 检验与卡方检验