首页 > 其他分享 >ShardingJDBC 04_分库实战

ShardingJDBC 04_分库实战

时间:2023-07-15 21:32:48浏览次数:38  
标签:分库 04 spring ds0 datasource shardingsphere sharding ShardingJDBC 节点

1 创建数据库

分别创建两个数据库,并在数据库中创建两个相同的表。

这里创建的数据库是: shardingjdbc1,shardingjdbc2

并在数据库下创建两张表:orders, order\_info

CREATE TABLE orders (

id INT(11) NOT NULL AUTO\_INCREMENT,

customer VARCHAR(50) NULL DEFAULT '0' COLLATE 'utf8mb4\_bin',

number INT(11) NOT NULL DEFAULT '0',

amount FLOAT(12,0) NOT NULL DEFAULT '0',

PRIMARY KEY (id) USING BTREE );

CREATE TABLE order_info (

id INT(11) NOT NULL AUTO\_INCREMENT,

order_id INT(11) NULL DEFAULT NULL,

description VARCHAR(50) NULL DEFAULT NULL,

PRIMARY KEY (id) USING BTREE );

建好后的库和表如下:

ShardingJDBC 04_分库实战_bc

2 创建 SpringBoot 工程

2.1 添加 maven 依赖

在pom.xml文件中添加如下依赖包。

主要是 shardingjdbc 的包,以及 mysql 驱动、springboot 连接数据库、处理数据相关的包。我们为了简化实体类代码冗余,也可以引入 lombok 包。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.1.1</version>
</dependency>

2.2 创建实体类及数据操作接口

2.2.1 创建实体类

实体类的字段,需要和数据表中的字段名建立对应关系。

  • @Entity 类名上加上该注解,来表明这是一个实体类
  • @Table 类名上加上该注解,设置数据表的名称
  • @Id 属性字段上加上该注解,表明这是一个主键
  • @Column 属性字段加上该注解,与数据表中的字段建立映射关系
package com.myjdbc.entity;

import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;

/***
 * 实体类
 */
@Data
@Entity
@Table(name = "orders")
public class Orders implements Serializable {

    @Id
    @Column(name = "id", nullable = false)
    private Integer id;

    @Column(name = "customer")
    private String customer;

    @Column(name = "number")
    private int number;

    @Column(name = "amount")
    private float amount;
}

2.2.2 创建数据操作接口

该接口继承了 jpa 的 JpaRepository 接口,该接口中提供了对数据表的增删改查等操作。

package com.myjdbc.repository;

import com.myjdbc.entity.Order;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * 数据操作接口
 */
public interface OrderRepository extends JpaRepository<Orders, Integer> {
}

2.3 创建配置文件

2.3.1 创建主配置文件

创建 application.properties 文件中,定义了 shardingjdbc 需要读取的数据源配置文件位置,及打印出过程中的SQL语句。

spring.shardingsphere.props.sql.show=true 输出执行的SQL语句

spring.profiles.active=sharding-database
spring.shardingsphere.props.sql.show=true

2.3.2 创建ShardingJDBC配置

创建 application-sharding-database.properties 配置文件, 这里主要配置数据源信息,包括数据节点、数据库连接信息等。

数据库节点信息

  • spring.shardingsphere.datasource.names 数据库节点名,当有多个节点时,其下信息需要分别配置。

数据节点配置

  • spring.shardingsphere.datasource.ds0.type 数据节点类型,固定值
  • spring.shardingsphere.datasource.ds0.driver-class-name 数据节点的驱动类
  • spring.shardingsphere.datasource.ds0.jdbc-url 数据节点的连接串
  • spring.shardingsphere.datasource.ds0.username 连接数据节点的用户名
  • spring.shardingsphere.datasource.ds0.password 连接数据节点的密码

分片规则设置

  • spring.shardingsphere.sharding.tables.orders.database-strategy.inline.sharding-column 进行分片设置的表及表中字段
  • 表名在 spring.shardingsphere.sharding.tables 后进行设置
  • 分片的字段名,则为该配置的属性值
  • spring.shardingsphere.sharding.tables.orders.database-strategy.inline.algorithm-expression 分片规则,这里设置的 ds\${id%2},表示将 id 值对2取模:
  • 等于0时,将数据放入 ds0 节点
  • 等于1时,将数据放入 ds1 节点
#datasource
spring.shardingsphere.datasource.names=ds0,ds1

spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://127.0.0.1:3366/shardingjdbc1?characterEncoding=UTF-8&useUnicode=true&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=123456

spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.jdbc-url=jdbc:mysql://127.0.0.1:3366/shardingjdbc2?characterEncoding=UTF-8&useUnicode=true&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=123456

spring.shardingsphere.sharding.tables.orders.database-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.orders.database-strategy.inline.algorithm-expression=ds${id%2}

标签:分库,04,spring,ds0,datasource,shardingsphere,sharding,ShardingJDBC,节点
From: https://blog.51cto.com/u_113754/6733699

相关文章

  • Java学习day04: 方法和数组
    我在B站上大学......
  • 项目使用分库分表
     股票关联分管人的分管中心,标的信息,投标信息,先对数据库进行分库,相同发标人的数据还要保证不能分散,就用的任务id+发标人的分管人id进行基因法拼凑,避免跨库查询 ......
  • 数据库设计 垂直分库 垂直分表
    分析师和研报的数据仅进行了垂直分库,分析师库和研报数据库。 研报信息还进行了垂直分表,研报主题,标题概要,打标的标签,第一署名,提交人等,研报主体内容和和研报相关的机构打分等非主题信息进行垂直分表        ......
  • 【转】Docker入门笔记04:三大核心概念
    原文:https://zhuanlan.zhihu.com/p/312142777Docker的三大核心概念镜像Image容器Container仓库RepositoryDocker大部分的操作都围绕它的三大核心概念一、Docker镜像Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的用于创建容器的模板。例如,一个镜像可以包含一个基......
  • 利用U盘给Intel NUC重装Ubuntu20.04系统
    背景因为社团里刚好有一个被玩坏的IntelNUC,我又刚好对此感兴趣,于是学长就交给我这一项任务,让我给这台NUC刷机。目录NUC刷机基本上简单分为四步一、格式化U盘二、下载Ubuntu20.04系统镜像三、将系统镜像写入U盘,制成启动盘四、把启动盘里的系统整到NUC里,重装系统,完成刷机。......
  • 分库分表建表阶段 绑定表问题要注意
    垂直分表,一个表的字段分散到多个表里面,每个表都存储其中一部分字段,减少io争抢,减少锁表的几率。同时发挥高频数据的操作效率,冷热数据进行分离1、把不常用的字段单独放到一张表里面2.把text,bolb等大字段拆分出来单独放在一张表里面3.经常组合查询的字段单独放到一张表里面垂直......
  • 104.字符串函数:strlen函数,strcpy函数,strcat函数,strcmp函数
    104.字符串函数:strlen函数,strcpy函数,strcat函数,strcmp函数1.字符串函数strlen(1)strlen函数strlen函数返回的是在字符串中’\0’前面出现的字符的个数(2)strlen的使用a.代码#include<stdio.h>#include<string.h>intmain(){ charstr1[]="abcdef"; printf("%d\n",s......
  • 104.什么是CSRF攻击如何防范CSRF攻击
    104.什么是CSRF攻击?如何防范CSRF攻击?CSRF攻击指的是跨站请求伪造攻击,攻击者诱导用户进入一个第三方网站,然后该网站向被攻击网站发送跨站请求。如果用户在被攻击网站中保存了登录状态,那么攻击者就可以利用这个登录状态,绕过后台的用户验证,冒充用户向服务器执行一些操作。C......
  • /login接口路径404但是拦截器却显示路径为/error
    参考文献:springboot全局异常处理中的404的/error重复拦截问题(https://blog.csdn.net/qq_35890572/article/details/106529428)问题:loginInterceptor在经过后,目标接口/login报错,又进入拦截器了,但是断点显示路径为/error因为在接口异常后,SpringMVC会去寻找有没有对应异常的统一处理......
  • BrowserRouter刷新404解决方案
    1、本地开发环境在js脚本命令里加上--history-api-fallback"scripts":{"serve":"webpackserve--configwebpack.dev.js--history-api-fallback"} 2、生产环境,可以修改 nglnx配置:server{listenXXXX;//端口号server_nameXXX.XXX.XXX.XXX;......