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

proxySQL+mysql8.0一主双从+springboot配置 准备环境:Ubuntu 22.04.3 LTS(四台虚拟机)要在 Ubuntu 上为 MySQL 8.0 搭建主从复制,你需要两台 Ubuntu 服务器:一台作为主(Master)服务器,另一台作为从(Slave)服务器。以下是详细步骤来设置 MySQL 主从复制。第 1 步:在两个服务器上安装 MySQL 8.0第 2 步:配置主服务器在 [mysqld] 部分中,进行以下设置:binlog_do_db = DBname(数据库名称) 阅读详情

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

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


🎯 目标

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

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

首先,确保您已经正确配置了 ProxySQL 和 MySQL 主从同步。

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/Shanghai
    username: root
    password: root
  mybatis-flex:
    mapper-locations: classpath:mapper/**/*Mapper.xml
    configuration:
      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 mapper
    PUBLIC "-//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 中启用延迟检测
Mybatis-Flex快速入门教程 与此同时,Mybatis-Flex 内置的 QueryWrapper^灵活 可以轻易的帮助我们实现 多表查询、链接查询、子查询 等等常见的 SQL 场景。这带来了几个好处:1、极高的性能;我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。:支持任意关系型数据库,还可以通过方言持续扩展,同时支持 多(复合)主键、逻辑删除、乐观锁配置、数据脱敏、数据审计、 数据填充 等等功能。 阅读详情

相关推荐

QWEN 2.5模型结构解析与代码解读

对Qwen2.5大模型的代码进行研究

4362

Mybatis-Flex之基础搭建

MyBatis-Flex 通过独特的架构,没有任何 MyBatis 拦截器、在 SQL 执行的过程中,没有任何的 SQL Parse,因此会带来指数级的性能增长。MyBatis-Flex 提供了非常灵活的 QueryWrapper,支持关联查询、多表查询、多主键、逻辑删除、乐观锁更新、数据填充、数据脱敏、等等…总而言之,MyBatis-Flex 能够极大地提高我们的开发效率和开发体验,让我们有更多的时间专注于自己的事情。亮点 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。

startqbb的博客 1048

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

( werks = '1001' lgort = 'A004' lgobe = '组装-成品组装' )( werks = '1002' lgort = 'C006' lgobe = '组装-二车间' )( werks = '1002' lgort = 'C007' lgobe = '组装-二车间' )( werks = '1001' lgort = 'A007' lgobe = '组装-MS' )( werks = '1001' lgort = 'A008' lgobe = '组装-GW' )

dingqing86的专栏 1192

SpringBoot+ProxySql 配置读写分离代理 解决 java.sql.SQLException: Unknown system variable query_cache

ProxySql 简介 ProxySQL 是基于 MySQL 的一款开源的中间件的产品,是一个灵活的 MySQL 代理层,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行缓存,支持动态加载(无需重启 ProxySQL 服务),故障切换和一些 SQL 的过滤功能。 具体介绍请参考:ProxySQL 基础篇 文章中指出 主从库的配置文件中 要有 read_only节点 这个在我的上一篇配置主从数据库中有配置 但是在MySQL配置文件中写的话 必须要写成 read-on...

weixin_43193729的博客 1911

Sentinel--哨兵系列数据下载地址及流程更新【202310】

哨兵系列数据下载地址及流程更新。哨兵系列卫星作为哥白尼计划的一部分,主要目标便是对地球的观测任务。哥白尼计划由三部分组成:空间部分(哨兵系列太空任务与其他太空机构任务)、测量部分(提供海洋、大陆表面和大气信息的陆基和机载数据收集网络)、数据管理与全球共享。

twg666的博客 3万+

双翌视觉系统配合机械手大视野定位案例(单目标带角度抓取)

一、定位原理概述 1.系统构架 视觉定位系统采用正向打光方式,光源在机械手上方,CCD从上往下拍摄,进行图像分析定位。相机将计算出的像素坐标转换为机械手的物理坐标,视觉软件与机械手进行网口通讯,将视野内物料的物理坐标发送给机械手,机械手抓取物料放在指定工位。 2.相机标定概述 系统采用宫格标定确定像素坐标和物理坐标一一对应关系,同时利用3点或者多点旋转标定求出旋转中心 系统采用宫格标定,自定义行列数和间距及旋转角度,通过机械手发送的当...

weixin_51554164的博客 2172

MyBatis-Flex的快速入门和使用 MyBatis 原生功能 与xml文件的配置

MyBatis-Flex 是一个优雅的框架,它非常轻量、同时拥有极高的性能与灵活性。(帮助文档)

2301_79859610的博客 1776

Hyper-V虚拟交换机实战:外部/内部/专用网络配置全解析

本文全面解析Hyper-V虚拟交换机的三种核心类型:外部、内部和专用网络。详细阐述了外部交换机如何让虚拟机融入物理网络,内部交换机如何构建宿主机与虚拟机的私有通道,以及专用交换机如何实现虚拟机间的完全隔离。通过实战配置步骤、IP规划建议和OpenWRT软路由案例,帮助用户根据需求灵活部署,并特别强调了外部交换机配置中“允许管理操作系统共享此网络适配器”这一关键选项的重要性,以避免宿主机断网。

weixin_29218963的博客 543

【Java开发】 Mybatis-Flex 01:快速入门

是一个优雅的MyBatis增强框架,它非常轻量、同时拥有极高的性能与灵活性。📌特征轻量:除了 MyBatis,没有任何第三方依赖、没有任何拦截器,在执行的过程中,没有任何的 Sql 解析(Parse)。这带来了几个好处:极高的性能、极易对代码进行跟踪和调试、把控性更高。灵活:支持 Entity 的增删改查、以及分页查询的同时,MyBatis-Flex 提供了 Db + Row 工具,可以无需实体类对数据库进行增删改查以及分页查询。

尹煜的博客 4370

【ISP图像处理】Demosaic去马赛克技术演进与边缘优化策略

本文深入解析了ISP图像处理中的Demosaic(去马赛克)技术。从Bayer阵列原理出发,梳理了从双线性插值、Hamilton-Adams边缘导向算法到利用通道相关性与自相似性的技术演进历程,并重点探讨了针对边缘与纹理伪影的优化策略,为工程实践中的算法选型与硬件协同设计提供了专业指导。

weixin_29091445的博客 387

华为OD机试真题2025双机位C卷 Python&JS 实现【卡牌游戏】

小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整除。你的任务是判断小明是否可以完成这个目标。

MISAYAONE的博客 403

Mybatis-flex配置全局参数

第一次使用springboot整合mybatis-flex,想配置一下常规配置比如不打印banner,修改数据库的方言(默认是mysql),开启或关闭二级缓存(默认开启),不打印sql日志等等,然后在application.yaml中配置都不起作用,最后看了一下源码 ,可以在使用@Configuration配置,现在记录一下:

ihchenchen的博客 3987

《C/C++等级考试(1~8级)历届真题解析》专栏总目录

中国电子学会《全国青少年软件编程等级考试》C/C++编程(1~8级)历届真题解析。订阅后可阅读专栏内所有真题解析,真题持续更新中!

人生就是一个不断学习的过程 2万+

Mybatis-Flex框架初体验

MyBatis-Flex 是一个优雅的 MyBatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper亮点 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。

专注Java后端技术干货、项目源码总结分享,期待您的关注。 2053

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java mysql代理服务器_ProxySQL 2.0.6 发布,MySQL 高性能代理

ProxySQL 是一个高性能的代理,目前用于 MySQL生 态系统中的 MySQL 和数据库服务器(比如用于 MySQL 和 MariaDB 的 Percona Server),它充当从数据库中寻找资源的客户端请求的中介。2.0.6 版本已经发布,它引入了许多新特性和增强功能,并修复了一些 bug,自从上一个版本以来,proxysql-admin 工具没有改变。具体如下:支持获取锁的 SELE...

weixin_39692253的博客 340

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

03. Springboot集成Mybatis-flex(一)

现在主流的Mybatis增强框架有很多,当然项目中最经常使用的还是MybatisPlus为主。但是用过MybatisPlus的小伙伴也知道,对于单表操作,链式的编码方式以及提供的Lambda支持可以简化很多代码量,但是如果多表操作,就显得心有余而力不足了。因此大多数项目中对于多表操作,仍然选择采用XML的编写方式。那么这里介绍一款Mybatis增强框架,号称集成了MybatisPlus等多个框架的优点。那就是Mybatis-Flex。

有一只柴犬的专栏 2963

【六】SpringBoot集成MyBatis-yml自动化配置原理详解

简介:spring boot整合mybatis开发web系统目前来说是市面上主流的框架,每个Java程序和springboot mybatis相处的时间可谓是比和自己女朋友相处的时间都多,但是springboot mybatis并没有得到你的真爱,因为你只是为了养活你女朋友而委曲求全的和spring boot mybatis假意相处。这里我们要看spring-boot-autoconfigure,找到META-INF\spring.factories,这些就是我们配置的数据库相关的配置了。

作者:大头兵(kit) 5741

04. Springboot集成Mybatis-flex(二)

上一篇文章《Springboot集成Mybatis-flex(一)》提到Mybatis Flex和Spring Boot的初步集成和基础使用。今天我们再来探索Mybatis Flex其他特性的使用。

有一只柴犬的专栏 2456

SpringBoot中MyBatis-Flex的集成和使用

MyBatis-Flex是一个基于MyBatis的数据访问框架,专门为Flex应用程序而设计的。它提供了一种灵活而高效的方式来处理Flex应用程序中的数据访问,可以轻松地连接到各种数据源,并提供了一些方便的工具和功能,包括对象关系映射(ORM)、动态查询、分页、事务处理等等。它的主要目的是简化数据访问的过程,使得开发人员可以更加专注于业务逻辑的开发,而不是一些琐碎的数据访问细节。

小筱在线博客 3766

Mybatis-flex

2.3 编写实体类 AritcleCat .java (此处使⽤了 Lombok (opens new window)简化代码)2.4 编写 Mapper 包下的 ArticleCat Mapper 接⼝。⼀张表article_cat 添加数据。

m0_59399054的博客 441

Mybatis增强版MyBatis-Flex介绍

本文介绍了 Mybatis-Flex,一个用于增强 MyBatis 的框架。相对于 MyBatis-Plus,Mybatis-Flex提供了一些显著的特点,如支持联表查询以及在Mybatis-Plus中收费的功能在Mybatis-Flex中是免费的。文章概述了 MyBatis-Flex 的功能特点,并深入介绍了联表查询的不同方案。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 3万+

MyBatis连接池的连接数和超时时间应该如何设置?

在设置连接池的连接数和超时时间时,需要综合考虑应用的需求、数据库的性能以及实际的运行环境。通过性能测试和实际运行中的监控,可以不断调整这些参数,以达到最佳的性能和稳定性。一般来说,可以先根据经验设置一个初始值,然后通过性能测试和实际运行中的监控来调整连接数。空闲连接超时时间(idleTimeout/maxIdleTime)事务超时时间(transactionTimeout)连接超时时间(connectionTimeout)

alankuo的专栏 1387

Mybatis-Flex使用

Mybatis-Flex使用

小何的博客 3017

mybatis-flex的基础使用

仅针对个人的使用,不喜勿怪。

cym2412574158的博客 3374

代码层面的读写分离vs使用proxysql

本文将比较Spring Boot代码层面实现数据库读写分离与使用ProxySQL管理读写分离的优缺点、适用场景和操作方法。通过对比这两种方法的原理、配置和实际应用效果,读者将更好地了解如何在项目中选择合适的读写分离方案。

todoitbo的博客 1万+
上一篇: Navicat 连接 ProxySQL 错误分析:1044 - Access denied for user ‘root’@‘%’ to database ‘db_order_plus、’
下一篇: Spring Boot + MyBatis-Flex 配置 ProxySQL 的完整指南
十方来财
十方来财 新星创作者: 编程框架技术领域 新星创作者: 编程框架技术领域
博客等级 码龄14年 8358粉丝 346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方来财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值