JDBC你肯定听过,那JDBC Loadbalance你用过么?

Spring Boot连接Doris集群高可用方案:JDBC多主机与代理层实战 数据库连接的高可用是分布式系统稳定运行的关键,而客户端驱动与连接池的配置往往决定故障恢复能力。MySQL JDBC多主机连接模式允许在单一连接串中配置多个地址,通过failover和loadbalance语义实现自动故障切换与负载均衡,从根本上解决单点连接问题。在Spring Boot应用中,结合HikariCP连接池探活、HAProxy代理层或服务注册中心,可以逐层构建高可用数据源架构,满足不同规模Doris集群的接入需求。本文梳理了这些方案的原理、适用场景以及常见坑点,从连接串参数到数据源动态刷新,为工 阅读详情
AI摘要

因运维团队测试数据库连接负载均衡缺乏现成工具,作者开发了一个基于JDBC实现数据库连接负载均衡的小插件。介绍了插件目标、技术选型,包括JDK8、SpringBoot、jdbc等,还阐述了代码编写,如配置文件、客户端、控制层,最后完成开发可打包给运维使用。

01 引言

前一段时间运维团队需要测试数据库连接的负载均衡jdbc loadbalance,但是网上找了一圈没有现成的工具。了解了运维的需求后,我就写了一个小插件,给运维使用。

jdbc loadbalance是一种通过 JDBC(Java Database Connectivity)实现数据库连接负载均衡的技术,旨在将应用程序的数据库请求智能地分配到多个数据库实例(如主从复制集群、读写分离架构等),以提升性能、可用性和可扩展性。

下来给我一起了解一下这款小插件吧

02 插件目标

运维需要一个客户端,能够在客户端上编写SQL 脚本并执行。

目标拆解:

  • 客户端:就是需要编写一个页面
  • 执行SQL:需要连接数据库
  • 客户端与数据的交互:需要一个Web服务支持

03 技术选型

  • 环境:JDK8
  • 生态:SprinBoot
  • 数据库连接工具:jdbc
  • 页面:Thymeleaf
  • 开发工具:Idea

因为是新插件,所以不用考略兼容性问题,所以直接使用SprinBoot方面全家桶开发即可。

04 代码编写

4.1 配置文件

# 应用服务 WEB 访问端口
server.port=8080

# 数据库配置链接
# spring.datasource.url = jdbc:mysql://10.100.25.21:3306/test_db?
spring.datasource.url=jdbc:mysql:loadbalance://10.100.25.21:3306,10.100.25.22:3306/test_db?loadBalanceAutoCommitStatementThreshold=5
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root

JDBC loadbalance属于JDBC的一部分,专门来支持多数据源的负载均衡的。被注释的部分就是正常的单数据源的连接方式。

4.2 客户端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JDBC-Loadbalanc</title>
    <style>......</style>
</head>
<body>
    <h1>Loadbalance SQL测试</h1>
    <div>
        <label for="sql"></label><textarea id="sql" placeholder="请输入SQL脚本"></textarea>
        <div>
            <button id="excute">执行</button>
            <button id="clear">清空</button>
        </div>
    </div>
    <div>
        <div class="result">执行结果:</div>
        <label for="result"></label><textarea id="result"></textarea>
    </div>
</body>
<script>
    /**
     *  执行
     */
    document.getElementById("excute").onclick = function () {
        document.getElementById("result").value = "";
        let param = document.getElementById("sql").value;
        const encodedData = encodeURIComponent(param);
        fetch("/loadbalance/excute", {
            method: 'post',
            body:`sql=${encodedData}`,
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            },
        })
        .then(res  => { return res.text()})
        .then(data => {{
             document.getElementById("result").value = data;
         }});
    }

    /**
     *  清空
     */
    document.getElementById("clear").onclick = function () {
        document.getElementById("sql").value = "";
        document.getElementById("result").value = "";
        document.getElementById("result").style.height = '200px';
    }
</script>
</html>

Html省略了样式,页面没有引入其他的js插件,浏览器支持的fetch方法发送请求。

4.3 控制层

/**
 * 插入、更新、删除语句
 *
 * @author ws
 * @date 2025/1/10 17:07
 * @param sql
 * @return {@link int}
 */
@RequestMapping("/excute")
public String excute(String sql){
    if (!StringUtils.hasText(sql)) {
        return "SQL 语句不能为空";
    }

    try {
        sql = sql.trim().toLowerCase();
        if (sql.startsWith("select")) {
            List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
            return JSON.toJSONString(maps, JSONWriter.Feature.PrettyFormat);
        }

        int update = jdbcTemplate.update(sql);
        return sql.split(" ")[0] + "语句, 影响行数:" + update + "条记录";
    }catch (Exception e) {
        return "SQL 语句执行失败,请检查: \r\n" + e.getMessage();
    }
}

05 效果展示

06 小结

到这里小插件就开发完了,打成jar包就可以给运维团队使用了。

在使用的过程中,运维团队还希望能够自己修改连接的数据库,这个就需要将配置文件放在外边,暴漏给运维人员,运维人员可以更改想要的数据库连接。

Jar包运行如何下载外部配置文件呢,我们下期讲。

MySQL-JDBC Loadbalance深入解析 背景说明 公司的整个电商系统搭建在华为云上,根据老总的估计,上线3个月之后日订单量会达到百万级别,保守估计3个月之后总订单个数预计会有5千万。MySQL单表达到千万级别,就会出现明显的性能问题。根据如此规模的数据,当时考虑了2套解决方案: 方案一:在业务上根据用户ID做拆分,将数据打散放在5台32U128G的华为云RDS上边 方案二:直接使用华为云的分布式数据库中间件DDM   方案一的... 阅读详情

相关推荐

mysql驱动协议之loadbalance和replication

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33754065的博客 2255

Mysql-JDBC配置LoadBalance协议

Mysql-JDBC长期以来提供了有效的手段在MySql集群、多主Replication部署的情况下分发读写负载,自从mysql-jdbc 5.1.3以来,你可以在不停用服务的情况下动态配置loadBalance连接,进程中的事务不丢失,实例不会发生异常。 loadBalance的配置协议如下: jdbc:mysql:loadbalance://[host1][:port],[host2][:po...

qq422243639的博客 1万+

Java DB loadBalance设计

Table of Contents   1、JDBC   简单介绍下JDBC的定义,如下(摘自百度百科):   JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。平时我们在实际开发中一般都是直接使用连接池来做DB相关操作的,很少会直接使用JDBC进行编程。但是连接池底层连接DB的时候也是使用的JDBC,比如c3p

jdbc连接mysql各种情况总结

mysql通过jdbc连接的各种情况

everlasting_188-java从业者 2823

Windows环境下DataEase一站式安装指南(含WSL2+Docker配置)

本文详细介绍了在Windows环境下通过WSL2和Docker快速部署DataEase的完整教程。从WSL2配置、Docker环境搭建到DataEase离线安装,逐步指导用户完成一站式部署,特别适合需要快速搭建数据分析平台的开发者。教程包含常见问题解决方案和性能优化技巧,帮助用户高效使用这款国产开源数据可视化工具。

weixin_42526166的博客 399

D类功放几种常见“爆破音”问题根源与改善措施

在数字D类功放刚上电或功放播放状态切换时,人耳偶尔会听到“嘣”的声音,我们把这个爆破的Pop Noise。数字功放Pop Noise 出现的原因有很多,本文主要分析Pop Noise 出现原因,并提供相应解决方法。

qq_26815321的博客 3594

jdbc sharding yml配置_Sharding-JDBC:查询量大如何优化?

主人公小王入职了一家刚起步的创业公司,公司正在研发一款App。为了快速开发出能够投入市场进行宣传的版本,小王可是天天加班到很晚,忙了一段时间后终于把第一个版本赶出来了。初期功能不多,表也不多,用的MySql存储业务数据。就一个节点,当然每天凌晨有定时备份机制。下图是目前的一个现状:单库读写操作得益于运营人员的大力推广,这款App初见成效。注册用户越来越多,查询量越来越大,对于不太会更新的数据小王加...

weixin_39921689的博客 210

(三) Debian 安装linuxcnc-ethercat中间件

1.在这里同样的也是需要下载一下依赖包 sudo apt install linuxcnc-uspace-dev 2.依赖包安装完成, 接着执行下面命令 sudo git clone https://github.com/sittner/linuxcnc-ethercat 还是可能出现下载网络错误下载不成功,可以直接下载我已上传百度云linuxcnc目录下 注意一下,后面make可能会出现头文件(xxx.h)的报错提示,在这里给大家一个处理办法 用aptitude 工具可以搞定 sudo apt-get

qq_30065813的博客 828

HikariCP底层原理与生产故障排查指南

JDBC连接池是Java应用数据库访问的核心基础设施,其性能与稳定性直接决定系统吞吐与可用性。HikariCP作为当前主流高性能连接池,以极致精简的设计实现纳秒级 getConnection() 调用,核心依托无锁ConcurrentBag、零开销代理及异步健康检测等关键技术。它不掩盖底层驱动缺陷,反而因‘光速’特性暴露SQL注入防护误报、国产数据库URL解析异常、类加载冲突等典型问题。在Spring Boot、Flink JDBC Sink、达梦/GaussDB等场景中,正确理解连接生命周期、驱动兼容性与

weixin_33834910的博客 410

ROS2前置基础教程 | 小鱼教你用CMake依赖查找流程

上面我们用g++、make、cmake三种方式来编译ros2的C++节点。用cmake虽然成功了,但是CMakeLists.txt的内容依然非常的臃肿,我们需要将其进一步的简化。将上面的CmakLists.txt改成下面的样子 接着继续生成和编译 是不是非常的神奇,为什么可以浓缩成那么短的几句指令呢?find_package查找路径对应的环境变量如下。 打开终端,输入指令: 结果 观察PATH变量,你会发现赫然在其中,中的路径如果以或结尾,则自动回退到上一级目录,接着检查这些目录下的 cmake找到这些目录

生活不止眼前的苟且 7163

国科大学习资料--图像处理(彭思龙、杨戈)--2020年期末考试题解析(学长整理分析)

在对20年卷子分析前,先看看19年卷子的解析(后面有20年的变化,由于从核心课调整到了普及课,20年的卷子相对简单,但是还是有很多细节) 解析:(字写的不好别嫌弃!!!!) 20年的卷子 第一题:和19年基本一致,但是加了高斯核计算费用,要算一个节省计算成本比率,所以去多看看PPT 第二题:和19年基本一致,加了证明两个高斯卷积仍然是高斯卷积,相当于19年题2和3结合 第三题:采样定理,和19年基本一致,但要注意加了证明 第四题:考了形态学提取图像边界 第五题:直方图,和19年一

无名何许人的博客 4364

基于mycat高可用方案——数据库负载

引言 传统企业级应用一般采取单台数据库,吞吐所有应用的读写,随着互联网的高速发展,以及微服务架构越来越普及,往往采用分库分表来支撑高速增长的大量业务数据吞吐。分库分表主要有两种方式:水平分表和垂直分库。 垂直分库即基于业务层面,将不同业务数据存储到不同的数据库中。 水平分表即把一个表的数据按照一定路由规则,路由到不同的数据库,通常采用按照某个字段如ID作为路由因子,路由到不...

450

DPI — 业务识别技术

目录 文章目录目录DPI 的业务识别技术类型特征识别Protocol 特征Payload 特征关联识别行为识别 DPI 的业务识别技术类型 DPI 的关键技术是能够高效的识别出网络上的各种应用类型。 浅报文检测是通过端口号来识别应用类型的。如:检测到端口号为 80 时,则认为是 HTTP 协议。但实际上,为了应用的安全性考虑通常不会使用默认端口来暴露业务能力。此时采用 L2 ~ L4 层的传统检测方法已无能为力了。 而 DPI 技术与我们熟知的防病毒软件在某些方面比较类似,即:其能识别的应用类型必须是系统已

烟云的计算 3519

MySQL读写分离设计(基于MyCat实现)

本文介绍使用MyCat实现MySQL主从架构实现读写分离。通过主从复制保障数据一致性,利用MyCAT中间件实现读写分离:写操作由主库(master)处理,读操作分发至从库(slave),提升系统性能与可用性。文中详细阐述了读写分离的原理、实现方式(代码层与中间件代理),并以MyCAT为例演示了主从配置及环境要求,强调高可用与高效运维的重要性。

2401_85766146的博客 452

FPGA开发中的操作系统

在FPGA开发中,操作系统起着关键的作用,它负责任务管理、资源管理、中断处理和设备驱动程序等功能。在实际的FPGA开发中,可以选择使用现有的操作系统,如MicroC/OS-II、FreeRTOS等,或者根据具体需求自行设计和开发操作系统。在FPGA(可编程逻辑门阵列)开发中,操作系统扮演着关键的角色,为硬件设计师提供了一种有效的方式来管理资源、调度任务并实现系统级功能。本文将介绍FPGA开发中的操作系统概念,并提供一个简单的示例代码来说明如何在FPGA平台上实现一个基本的操作系统。

CqpFsharp的博客 1163

Python 爬虫教程:金融数据定向抓取(银行 + 投资网站数据结构化提取)

在当今数字化时代,金融数据的获取和分析对于投资者、分析师以及金融机构来说至关重要。Python 爬虫技术可以帮助我们高效地从各种网站上抓取金融数据,从而为投资决策、风险评估和市场分析提供支持。本文将详细介绍如何使用 Python 爬虫技术来定向抓取银行和投资网站的数据,并将其结构化提取,以便进一步分析和使用。

u014481728的博客 884

Java DB loadBalance 设计

1 JDBC 简单介绍下JDBC的定义,如下(摘自百度百科): JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名

刘默默的博客 653

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Mysql Connector/J 源码分析(LoadBalance)

文章目录前言名词定义一、Loadbalance的逻辑结构二、异常处理机制1.构造阶段 前言 本文讨论Connector/J 的loadbalance模块。我们先观察整个模块的大概逻辑结构和每一个大组件的作用。然后在代码层面分析对于异常的控制,这里会有两个“区分”:1)区分构造连接过程和使用连接过程;2)区分通讯异常和数据异常。最终分析此模式的实用性。 本次分析的版本为5.1.46。若通过maven下载,可添加以下依赖: <dependency> <groupId>mysql&

yyb_gz的专栏 2720

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

mysql load balance_mysql驱动(jdbc)方式连接分布式数据库异常

分析溢出源。例如,从以下日志可以分析出,溢出原因为驱动内部陷入死循环。at com.mysql.jdbc.LoadBalancedConnectionProxy.pickNewConnection(LoadBalancedConnectionProxy.java:344)at com.mysql.jdbc.LoadBalancedAutoCommitInterceptor.postProcess(...

weixin_34434843的博客 797

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JDBC 负载均衡读取mysql cluster

语句使用:jdbc:mysql:loadbalance://[host1][:port],[host2][:port][,[host3][:port]]...[/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...] 例如:jdbc:mysql:loadbalanc...

weixin_30571465的博客 565

浅析MySQL JDBC连接配置上的两个误区

相信使用MySQL的同学都配置过它的JDBC驱动,多数人会直接从哪里贴一段URL过来,然后稍作修改就上去了,对应的连接池配置也是一样的,很少有人会去细想这每一个参数都是什...

weixin_37098404的博客 305

oracle jdbc balance,JDBC 如何配置RAC 的Load Balance ?

PURPOSE-------This document discusses how to implement load balancing from a JDBC applicationthat connects to a RAC configured system.SCOPE & APPLICATION-------------------This material is intende...

weixin_39880328的博客 568

mysql load balance_mysql8 参考手册-connector-j高级负载平衡和故障转移配置

connector/J为MySQL群集或多主服务器部署提供了有用的负载平衡实现,如 第9.3节“使用连接器/ J配置负载平衡” 和对多主复制拓扑的支持中所述。此相同的实现用于平衡具有复制意识的连接的只读从属服务器之间的负载。当尝试在多台服务器之间平衡工作负载时,驱动程序必须确定何时可以安全地交换服务器,例如,在事务过程中这样做可能会引起问题。重要的是不要丢失状态信息。因此,Connector / ...

weixin_33877981的博客 845

JDBC负载均衡测试工具开发实践:从需求到实现

目前这个轻量级工具已经能够满足运维团队的基本测试需求,通过打包为JAR文件即可快速部署使用。用户反馈与改进方向运维团队在使用过程中提出了新的需求:希望能够灵活修改数据库连接配置,而无需重新打包部署。这涉及到外部化配置的管理,我们将通过以下方案实现:将配置文件外置,支持运行时修改提供配置热更新机制增加连接池参数调优支持在后续的文章中,我们将深入探讨Spring Boot应用如何实现外部化配置管理,以及JAR包运行时如何动态加载外部配置文件的技术细节。

2501_93078354的博客 1002

JDBC访问Mysql进行读写分离测试

在程序中添加两个数据源、分别对应读跟写: #读# DBDriver=com.mysql.jdbc.Driver url=jdbc\:mysql\:loadbalance\://10.11.0.75,172.16.0.202\:3306/DB_TEST7?roundRobinLoadBalance\=true&characterEncoding\=UTF-8 name=TESTUSER pass=

胡汉三 7092
上一篇: 短信被截断?5分钟用Java打造企业级短链服务
下一篇: 【Spring Boot配置终极指南】2分钟让你精准指定配置文件,让应用部署游刃有余!
智_永无止境
博客等级 码龄10年 803粉丝 406原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

智_永无止境

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

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

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

打赏作者

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

抵扣说明:

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

余额充值