珠海网站建设方案报价广告制作公司注册

张小明 2026/1/9 22:00:09
珠海网站建设方案报价,广告制作公司注册,网站设计背景图片,小程序制作开发如意推《SpringBoot整合Sharding-JDBC全面教程#xff1a;常用 API 串联与实战指南》 你想要在SpringBoot项目中规范、高效地整合Sharding-JDBC#xff0c;掌握其分库分表、读写分离等核心功能的常用API#xff0c;并遵循行业最佳实践#xff0c;这份教程会帮你系统落地。 一、核…《SpringBoot整合Sharding-JDBC全面教程常用 API 串联与实战指南》你想要在SpringBoot项目中规范、高效地整合Sharding-JDBC掌握其分库分表、读写分离等核心功能的常用API并遵循行业最佳实践这份教程会帮你系统落地。一、核心前置说明1. 版本选型最佳实践选稳定兼容版JDK1.8Sharding-JDBC 5.x对JDK8兼容性最好SpringBoot2.7.x避免3.x初期兼容性问题Sharding-JDBC5.4.0Apache ShardingSphere 5.x稳定版含JDBC模块2. 依赖引入Mavendependencies!-- SpringBoot核心 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- SpringBoot数据访问 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependency!-- Sharding-JDBC核心依赖 --dependencygroupIdorg.apache.shardingsphere/groupIdartifactIdshardingsphere-jdbc-core-spring-boot-starter/artifactIdversion5.4.0/version/dependency!-- MySQL驱动 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scopeversion8.0.33/version/dependency!-- 数据源HikariCPSpringBoot默认性能最优 --dependencygroupIdcom.zaxxer/groupIdartifactIdHikariCP/artifactId/dependency!-- 测试 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies二、核心概念速览新手必懂分片键用于分库/分表的字段如订单ID、用户ID分片策略按规则将数据路由到指定库/表如取模、范围、哈希逻辑表分表的抽象名称如t_order物理表是t_order_0、t_order_1读写分离主库写、从库读Sharding-JDBC自动路由三、实战场景1单库分表最常用1. 数据库准备创建数据库demo_db并创建2个订单分表CREATEDATABASEIFNOTEXISTSdemo_db;USEdemo_db;-- 订单逻辑表t_order的物理表t_order_0、t_order_1CREATETABLEt_order_0(order_idBIGINTPRIMARYKEY,user_idINTNOTNULL,order_amountDECIMAL(10,2)NOTNULL,create_timeDATETIMEDEFAULTCURRENT_TIMESTAMP);CREATETABLEt_order_1(order_idBIGINTPRIMARYKEY,user_idINTNOTNULL,order_amountDECIMAL(10,2)NOTNULL,create_timeDATETIMEDEFAULTCURRENT_TIMESTAMP);2. 核心配置application.yml遵循最佳实践配置分层清晰、策略明确、注释完整spring:# Sharding-JDBC核心配置shardingsphere:# 数据源配置datasource:names:ds0# 数据源名称单库ds0:type:com.zaxxer.hikari.HikariDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/demo_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghaiusername:root# 替换为你的数据库账号password:root# 替换为你的数据库密码# 分库分表规则rules:sharding:# 分片表配置tables:t_order:# 逻辑表名actual-data-nodes:ds0.t_order_${0..1}# 物理表节点ds0库下的t_order_0/1# 分片策略按order_id取模分表table-strategy:standard:sharding-column:order_id# 分片键sharding-algorithm-name:t_order_inline# 分片算法名称# 分片算法配置sharding-algorithms:t_order_inline:type:INLINE# 行内表达式算法简单高效适合取模/范围props:algorithm-expression:t_order_${order_id % 2}# 算法规则order_id%2决定表后缀# 属性配置打印SQL调试必备生产可关闭props:sql-show:true3. 代码编写最佳实践分层解耦1实体类Order.javaimportlombok.Data;importjavax.persistence.*;importjava.math.BigDecimal;importjava.time.LocalDateTime;DataEntityTable(namet_order)// 映射逻辑表名publicclassOrder{IdprivateLongorderId;// 分片键订单IDprivateIntegeruserId;// 用户IDprivateBigDecimalorderAmount;// 订单金额privateLocalDateTimecreateTime;// 创建时间}2RepositoryOrderRepository.javaimportorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.stereotype.Repository;RepositorypublicinterfaceOrderRepositoryextendsJpaRepositoryOrder,Long{// 继承JpaRepository无需手写基础CRUD}3ServiceOrderService.javaimportorg.springframework.stereotype.Service;importjavax.annotation.Resource;importjava.util.List;ServicepublicclassOrderService{ResourceprivateOrderRepositoryorderRepository;// 新增订单Sharding-JDBC自动路由到对应分表publicOrdersaveOrder(Orderorder){returnorderRepository.save(order);}// 查询所有订单Sharding-JDBC自动聚合所有分表数据publicListOrderlistAllOrders(){returnorderRepository.findAll();}// 根据订单ID查询Sharding-JDBC自动路由到对应分表publicOrdergetOrderById(LongorderId){returnorderRepository.findById(orderId).orElse(null);}}4测试类ShardingJdbcDemoApplicationTests.javaimportorg.junit.jupiter.api.Test;importorg.springframework.boot.test.context.SpringBootTest;importjavax.annotation.Resource;importjava.math.BigDecimal;importjava.time.LocalDateTime;SpringBootTestpublicclassShardingJdbcDemoApplicationTests{ResourceprivateOrderServiceorderService;TestpublicvoidtestSaveOrder(){// 测试订单1orderId1 → 路由到t_order_1Orderorder1newOrder();order1.setOrderId(1L);order1.setUserId(1001);order1.setOrderAmount(newBigDecimal(99.99));order1.setCreateTime(LocalDateTime.now());orderService.saveOrder(order1);// 测试订单2orderId2 → 路由到t_order_0Orderorder2newOrder();order2.setOrderId(2L);order2.setUserId(1002);order2.setOrderAmount(newBigDecimal(199.99));order2.setCreateTime(LocalDateTime.now());orderService.saveOrder(order2);// 查询验证System.out.println(订单1orderService.getOrderById(1L));System.out.println(订单2orderService.getOrderById(2L));System.out.println(所有订单orderService.listAllOrders());}}4. 运行结果验证控制台会打印Sharding-JDBC路由后的SQL比如INSERT INTO t_order_1 (order_id, user_id, order_amount, create_time) VALUES (1, 1001, 99.99, ...)INSERT INTO t_order_0 (order_id, user_id, order_amount, create_time) VALUES (2, 1002, 199.99, ...)数据库中t_order_1有订单1t_order_0有订单2查询时自动聚合结果。四、实战场景2分库分表进阶若需按user_id分库、order_id分表修改配置如下核心变化spring:shardingsphere:datasource:names:ds0,ds1# 两个数据源分库ds0:type:com.zaxxer.hikari.HikariDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/demo_db_0?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghaiusername:rootpassword:rootds1:type:com.zaxxer.hikari.HikariDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/demo_db_1?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghaiusername:rootpassword:rootrules:sharding:tables:t_order:actual-data-nodes:ds${0..1}.t_order_${0..1}# 两个库每个库2个表# 分库策略按user_id取模database-strategy:standard:sharding-column:user_idsharding-algorithm-name:t_order_db_inline# 分表策略按order_id取模table-strategy:standard:sharding-column:order_idsharding-algorithm-name:t_order_table_inlinesharding-algorithms:t_order_db_inline:type:INLINEprops:algorithm-expression:ds${user_id % 2}t_order_table_inline:type:INLINEprops:algorithm-expression:t_order_${order_id % 2}props:sql-show:true五、实战场景3读写分离最佳实践主从架构spring:shardingsphere:datasource:names:master,slave0# 主库从库master:type:com.zaxxer.hikari.HikariDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/demo_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghaiusername:rootpassword:rootslave0:type:com.zaxxer.hikari.HikariDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3307/demo_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghaiusername:rootpassword:rootrules:readwrite-splitting:data-sources:demo_ds:# 读写分离数据源名称type:STATIC# 静态读写分离固定主从props:write-data-source-name:master# 写库read-data-source-names:slave0# 读库多个用逗号分隔load-balancer-name:round_robin# 负载均衡算法轮询load-balancers:round_robin:type:ROUND_ROBIN# 轮询算法简单高效props:sql-show:true六、常用API与最佳实践1. 自定义分片算法进阶场景若内置算法不满足需求可自定义分片算法importorg.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingAlgorithm;importorg.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;importorg.springframework.stereotype.Component;importjava.util.Collection;// 自定义精确分片算法按order_id范围分表ComponentpublicclassCustomOrderShardingAlgorithmimplementsPreciseShardingAlgorithmLong{OverridepublicStringdoSharding(CollectionStringavailableTargetNames,PreciseShardingValueLongshardingValue){LongorderIdshardingValue.getValue();// 自定义规则order_id1000 → t_order_0否则→t_order_1if(orderId1000){returnt_order_0;}else{returnt_order_1;}}}配置中替换算法类型为CUSTOM指定算法类sharding-algorithms:t_order_custom:type:CUSTOMprops:sharding-algorithm-class-name:com.example.demo.algorithm.CustomOrderShardingAlgorithm2. 分布式ID生成最佳实践避免主键冲突Sharding-JDBC内置分布式ID生成器配置如下spring:shardingsphere:rules:sharding:key-generators:snowflake:# 雪花算法推荐type:SNOWFLAKEprops:worker-id:1# 工作节点ID集群需唯一tables:t_order:key-generate-strategy:column:order_id# 主键字段key-generator-name:snowflake# 关联雪花算法3. 最佳实践总结避坑指南分片键选择优先选查询频繁、值均匀的字段如订单ID避免用范围字段如时间作为唯一分片键易数据倾斜。避免跨库/跨表JOIN分库分表后JOIN性能极差尽量通过业务设计规避。生产环境关闭sql-show避免日志冗余影响性能。事务支持分库事务需用Sharding-JDBC的XA事务或BASE事务单库事务无特殊配置。七、核心测试与验证功能验证通过单元测试验证数据路由是否正确如不同分片键的值是否落到指定库/表。性能验证压测分库分表后的读写性能对比单库单表确保分片后性能提升。异常验证测试分片键为空、值超出范围等场景确保程序有异常处理。总结SpringBoot整合Sharding-JDBC的核心是数据源配置分片规则算法配置优先使用INLINE算法简单高效复杂场景自定义算法。最佳实践分片键选均匀字段、避免跨库JOIN、用雪花算法生成分布式ID、生产关闭SQL打印。常见场景优先级单库分表入门→ 分库分表进阶→ 读写分离高可用按需落地。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

学校介绍网站模板网站app建设方案

ImGui Node Editor:可视化编程的终极完整指南 【免费下载链接】imgui-node-editor Node Editor built using Dear ImGui 项目地址: https://gitcode.com/gh_mirrors/im/imgui-node-editor ImGui Node Editor是一款基于Dear ImGui构建的现代化节点编辑器&…

张小明 2026/1/5 13:44:09 网站建设

邢台做wap网站东莞设计网站推荐

Fashion-MNIST数据集高效获取与智能管理全攻略 【免费下载链接】fashion-mnist fashion-mnist - 提供了一个替代MNIST的时尚产品图片数据集,用于机器学习算法的基准测试。 项目地址: https://gitcode.com/gh_mirrors/fa/fashion-mnist 还在为机器学习项目的数…

张小明 2026/1/9 2:46:02 网站建设

2018什么做网站mvc5网站开发之六

我们正活在一个信息爆炸却意义稀缺的时代。每天,企业要面对成千上万条用户评论、新闻报道、社交动态、行业报告、政策文件……这些信息像无数根散落的线头,缠在一起,看似丰富,实则让人更难看清方向。 是用户真的不满意产品&#x…

张小明 2026/1/5 14:20:30 网站建设

高档手表网站高明网站设计公司

夜校预约管理报名小程序、我司这样开发!现代都市工作压力下,越来越多的年轻人喜欢上夜校来充实自己的生活和释放压力!同时现在线上消费已经成为一种生活习惯了!人们可以等待,但是不想麻烦。想要抓住客户,那…

张小明 2026/1/5 15:59:04 网站建设

购物网站商城有那些专门做财务分析的网站

Diablo Edit2完全使用指南:暗黑破坏神II存档编辑终极教程 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit Diablo Edit2是一款功能强大的暗黑破坏神II角色存档编辑工具,能够…

张小明 2026/1/5 4:38:49 网站建设

4.请简述网站建设流程的过程js网页特效

网易云音乐NCM格式转换终极指南:3步解锁加密音乐 【免费下载链接】ncmdump ncmdump - 网易云音乐NCM转换 项目地址: https://gitcode.com/gh_mirrors/ncmdu/ncmdump ncmdump是一款专为网易云音乐用户设计的强大NCM格式转换工具,能够快速将加密的N…

张小明 2026/1/5 16:27:42 网站建设