shardingjdbc官⽅⽂档_跟我学shardingjdbc之shardingjdbc⼊
在上⽂中,我们讲解了分布式环境下的分库分表,从概念及案例上分析了何为分库分表及其优缺点。
我说分布式之分库分表
从本⽂开始我们⼀起学习⼀下如何使⽤当前⽐较成熟的分库分表框架 Sharding-JDBC 实现分库分表。
什么是Sharding-JDBC
Sharding-JDBC是分布式数据中间件Sharding-Sphere中的重要组成部分,官⽅的介绍如下:
Sharding-Sphere是⼀套开源的分布式数据库中间件解决⽅案组成的⽣态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独⽴的产品组成。他们均提供标准化的数据分⽚、分布式事务和数据库治理功能,可适⽤于如Java同构、异构语⾔、容器、云原⽣等各种多样化的应⽤场景。
Sharding-JDBC 是Sharding-Sphere的第⼀款产品,也是最接近开发者的⼀款分库分表中间件,很有代表性,也值得我们深⼊的学习与应⽤。
Sharding-JDBC官⽅⽂档地址
这⾥我贴出官⽅的⽂档地址,版本为3.x,有问题先看⽂档是⽐较直接快速准确的trouble-shooting⽅式。
如何使⽤Sharding-JDBC3.x 实现分库分表
简单了解⼀下背景之后,我们⽤⼀个案例先把它⽤起来,直观地感受⼀下Sharding-JDBC的魅⼒,后续我们会对它做进⼀步的讲解。
由于⽬前的后端Java开发主要以Spring Boot为主,因此我将主要依据Spring Boot的2.x进⾏讲解。
建⽴数据库表
⾸先建⽴⼀个4库8表的数据库结构。数据库名为db_00--db_03,建⽴⼀个简单的订单表名为t_order_0000-t_order_0001,每个库中两张表
表结构⽐较简单,因为我们的⽬的是尽快的将框架⽤起来,太复杂的表结构容易让我们陷⼊业务中⽽偏离了我们的主旨。
订单表t_order的建表语句如下:
-- ----------------------------
-- Table structure for t_order_0000
-- ----------------------------
DROP TABLE IF EXISTS `t_order_0000`;
CREATE TABLE `t_order_0000` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) DEFAULT NULL,
`order_id` bigint(20) DEFAULT NULL,
`user_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1239 DEFAULT CHARSET=utf8;
-
- ----------------------------
-- Table structure for t_order_0001
-- ----------------------------
DROP TABLE IF EXISTS `t_order_0001`;
CREATE TABLE `t_order_0001` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) DEFAULT NULL,
`order_id` bigint(20) DEFAULT NULL,
`user_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1239 DEFAULT CHARSET=utf8;
在每个分库中均建⽴表t_order_0000,t_order_0001
数据库结构如下
db_00--
|--t_order_0000
|--t_order_0001
db_01--
|--t_order_0000
|--t_order_0001
db_02--
|--t_order_0000
|--t_order_0001
db_03--
|--t_order_0000
|--t_order_0001
宏观上我们就有了8个数据节点,如下:
db_00.t_order_0000, db_00.t_order_0001
db_01.t_order_0000, db_01.t_order_0001
db_02.t_order_0000, db_02.t_order_0001
db_03.t_order_0000, db_03.t_order_0001
建⽴demo⼯程
这⾥直接使⽤IDEA的spring-boot-initializer建⽴了⼀个demo⼯程,⼯程名为snowalker-shardingjdbc-demo,⽂章末尾会放上demo⼯程的github地址。
⼯程的结构如下:
引⼊sharding-jdbc-spring-boot-starter依赖如下
<!-- sharding-sphere -->
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
数据库访问组件使⽤mybatis,这⾥直接使⽤了mybatis-spring-boot-starter
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
完整的l内容如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"        xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>
<groupId>com.snowalker.shardingjdbc</groupId>
<artifactId>snowalker-shardingjdbc-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>snowalker-shardingjdbc-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<mavenpiler.source>1.8</mavenpiler.source>
<mavenpiler.target>1.8</mavenpiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
&porting.outputEncoding>UTF-8</porting.outputEncoding>
<mybatis-spring-boot-starter-version>1.3.2</mybatis-spring-boot-starter-version>
<druid-version>1.1.6</druid-version>
<sharding-jdbc-version>3.0.0</sharding-jdbc-version>
<jasypt-spring-boot-version>1.14</jasypt-spring-boot-version>
<fastjson-version>1.2.28</fastjson-version>
<common-lang3-version>3.8</common-lang3-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- sharding-sphere -->
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>${sharding-jdbc-version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot-starter-version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置mybatis
接着我们在application.properties中配置mybatis,指定mapper配置⽂件的位置
>>>>>>>>>>>>>>##
#
#    mybatis配置
#
>>>>>>>>>>>>>>###
mybatis.mapper-locations=classpath:mapper/*.xml
这⾥我在resources下建⽴⼀个⽬录mapper,将mapper配置⽂件均放置在该⽬录下。
配置基本分库分表规则
由于我们使⽤了Spring Boot作为基础框架,因此只需要通过groovy表达式的⽅式进⾏分库分表规则的配置。
引⼊分库分表配置⽂件
注意 ⼀定要以application- 开这⾥在resources下建⽴⼀个application-db-config.properties配置,⽤于配置分库分表相关的配置项。 注意
头,否则不能正常的引⼊。 在application.properties中添加如下配置,引⼊分库分表的配置项
spring.profiles.include=db-config
application-db-config.properties分库分表配置项详解
这⾥使⽤druid作为数据库的连接池,我们需要在 application-db-config.properties 中配置数据源及分库分表的规则等信息。
数据源分⽚详细配置
>>>>>>>>>>>####
#
#          数据源分⽚详细配置
#
>>>>>>>>>>>####
#打印sql⽇志
fig.sharding.props.sql.show=true
#数据源名称,多数据源以逗号分隔
sharding.jdbc.datasource.names=ds0,ds1,ds2,ds3
>>>>>>>>>>>####
#
#          数据源参数配置-druid
#
>>>>>>>>>>>####
initialSize=5
minIdle=5
maxIdle=100mysql操作官方文档
maxActive=20
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
sharding.jdbc.datasource.names 指定了ds0,ds1,ds2,ds3四个物这⾥主要配置了分⽚数据源及公共的数据源配置参数,我们通过sharding.jdbc.datasource.names
理分⽚数据源
默认分⽚规则配置
⼀般在线上业务中,会有配置信息表,⽐如: 省市区编码字典表,错误码字典表 等类型的不需要进⾏分库分表的数据表,那么我们就可以将他们放置在默认的分⽚中,这样,当我们的sql执⾏对这些表的操作,Sharding-JDBC的sql解析器解析这些sql时会路由到默认的数据源进⾏对应的操作。
>>>>>>>>>>>####
#
#                      默认分⽚规则配置--字典表使⽤
#
>>>>>>>>>>>####
#未配置分⽚规则的表将通过默认数据源定位-适⽤于单库单表,该表⽆需配置分⽚规则
fig.sharding.defaultDataSourceName=ds0
fig.sharding.defaultDataSourceName 指定我们在上⽂中配置的分⽚中的某⼀个数据源别名作为默认数通过 fig.sharding.defaultDataSourceName
据源
数据源详细配置
这⾥是对上述四个数据源的详细配置,篇幅可能较长,我先以⼀个详细的配置进⾏讲解

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论