springboot整合shardingjdbc实现分库分表最简单demo

下面是一份完整的SpringBoot整合ShardingJDBC实现分库分表最简单demo的攻略:

一、前置条件

  1. 掌握SpringBoot和Maven的基础及配置方式;
  2. 了解什么是ShardingJDBC以及其分库分表的实现原理;
  3. 准备好使用的数据库及其账号密码。

二、添加依赖

在Maven的pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-core</artifactId>
    <version>5.0.0-alpha</version>
</dependency>
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>5.0.0-alpha</version>
</dependency>
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-namespace</artifactId>
    <version>5.0.0-alpha</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>

这些依赖用于引入ShardingJDBC及其SpringBoot集成包、MySQL驱动等。

三、配置ShardingJDBC

在SpringBoot的application.yml文件中添加以下配置:

spring:
  datasource:
    names: primary_ds, secondary_ds
    primary_ds:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/primary_db?serverTimezone=UTC&useSSL=false
      username: root
      password: root
    secondary_ds:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/secondary_db?serverTimezone=UTC&useSSL=false
      username: root
      password: root
  shardingsphere:
    datasource:
      names: ds
      ds:
        primary_ds:
          url: jdbc:mysql://localhost:3306/primary_ds?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
          username: root
          password: ***
        secondary_ds:
          url: jdbc:mysql://localhost:3306/secondary_ds?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
          username: root
          password: ***
    sharding:
      tables:
        user:
          actualDataNodes: ds.user_$->{0..1}
          tableStrategy:
            standard:
              shardingColumn: id
              shardingAlgorithmName: database_inline
          databaseStrategy:
            inline:
              shardingColumn: id
              shardingAlgorithmName: database_inline

以上配置为ShardingJDBC的分库表策略,分为两个数据源(primary_ds和secondary_ds),两个库(primary_db和secondary_db)和一个分表(user_id),其中:

  1. primary_db和secondary_db为两个逻辑库,对应两个数据源primary_ds和secondary_ds。

  2. id字段为分表字段,数据会根据该字段进行取模选择表。

  3. ds.user_$->{0..1} 表示user表共有2张表,分别为user_0和user_1。

四、编写Mapper

新建一个UserMapper接口,具体定义如下:

@Mapper
public interface UserMapper {

    @Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})")
    int insert(User user);

    @Select("SELECT * FROM user")
    List<User> selectAll();
}

以上Mapper为基于MyBatis的注解Mapper,用于定义数据访问API,这里仅定义了插入和查询全部记录两个方法,其中User类为具体业务实体模型,可根据需求自定义。

五、编写Service

新建一个UserService接口,具体定义如下:

public interface UserService {

    int insert(User user);

    List<User> selectAll();
}

新建一个UserServiceImpl类,具体定义如下:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public int insert(User user) {
        return userMapper.insert(user);
    }

    @Override
    public List<User> selectAll() {
        return userMapper.selectAll();
    }
}

以上为基于Spring的Service层,用于定义业务逻辑,这里应用了ShardingJDBC的分库分表功能,可实现数据自动分库分表。

六、编写Controller

新建一个UserController类,具体定义如下:

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/user")
    public String createUser(@RequestBody User user) {
        userService.insert(user);
        return "create user success";
    }

    @GetMapping("/users")
    public List<User> getUsers() {
        return userService.selectAll();
    }
}

以上为基于SpringMVC的Controller层,用于定义HTTP接口,其中POST /user接口用于创建用户,GET /users接口用于查询全部用户记录。

七、启动项目

启动SpringBoot应用,可以使用Postman等HTTP客户端进行测试,访问http://localhost:8080/users接口可以获取全部用户记录。

示例一

为了验证ShardingJDBC支持分库分表,可以新建一个名为testdb的数据库,在其中创建两个表user_0和user_1,再进行测试:


USE testdb;

CREATE TABLE user_0 (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(64),
  age INT
);

CREATE TABLE user_1 (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(64),
  age INT
);

启动SpringBoot应用,此时ReplicaQueryTests进程中将自动创建表user_0和user_1。然后使用Postman等工具进行测试,访问http://localhost:8080/user接口进行创建用户,观察数据库的数据是否插入到正确的表中。

示例二

为了验证ShardingJDBC支持分库分表,可以将两个表放到不同的数据库中,然后进行测试:

spring:
  shardingsphere:
    datasource:
      names: ds
      ds:
        primary_ds:
          url: jdbc:mysql://localhost:3307/primary_db?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
          username: root
          password: ***
        secondary_ds:
          url: jdbc:mysql://localhost:3308/secondary_db?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
          username: root
          password: ***

将primary_db放到本地的3307端口,secondary_db放到本地的3308端口。

启动SpringBoot应用,此时ReplicaQueryTests进程中将自动创建表user_0和user_1,并将数据分别插入到primary_db和secondary_db的user_0和user_1中,可以利用数据库客户端进行查询,观察数据是否插入到正确的库和表中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot整合shardingjdbc实现分库分表最简单demo - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 用Eclipse 创建一个简单的web项目(图文教程)

    下面是详细的攻略: 步骤一:安装Eclipse 首先,在官网下载并安装Eclipse。安装成功后,打开Eclipse。 步骤二:创建一个新的动态Web项目 选择“File”-> “New” -> “Project”。 在新窗口中,展开“Web”选项卡,选择“Dynamic Web Project”。 输入你的项目名称并点击“Next”。 点击“T…

    Java 2023年5月20日
    00
  • JS+DIV+CSS实现仿表单下拉列表效果

    下面是JS+DIV+CSS实现仿表单下拉列表效果的完整攻略: 一、实现思路 在HTML中定义一个表单元素 使用CSS美化表单元素的样式 使用JavaScript控制下拉列表的显示与隐藏,并将选中的值显示到表单元素中 二、具体实现步骤 1. HTML结构 在HTML中定义一个表单元素,并使用div元素模拟下拉列表的选项: <div class=&quot…

    Java 2023年6月15日
    00
  • JTS空间坐标Geometry使用

    Geomtery子类图 创建Geometry GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); // 点 Coordinate coord = new Coordinate(1, 1); Point point = geometryFactory.createPo…

    Java 2023年4月23日
    00
  • JSP 自定义标签第3/3页

    我来详细讲解一下 “JSP 自定义标签第3/3页” 的完整攻略。 什么是 JSP 自定义标签 JSP 自定义标签,指的是用户可以自定义自己的标签,在 JSP 页面上使用,达到简化 JSP 页面代码,增加可读性的目的。JSP 自定义标签可以分为两种类型: 动态内容标签:在标签体中执行动态内容,并输出结果。 静态内容标签:输出预定的静态内容,不需要执行动态逻辑。…

    Java 2023年6月15日
    00
  • Windows 10上JDK环境安装配置图文教程

    下面是“Windows 10上JDK环境安装配置图文教程”的完整攻略: 1. 下载JDK安装包 首先,你需要下载JDK安装包。此步骤需要在Oracle官方网站上完成。 打开以下链接:https://www.oracle.com/java/technologies/javase-downloads.html 在“Java SE Downloads”页面中,找到…

    Java 2023年5月24日
    00
  • JavaWeb Servlet中Filter过滤器的详解

    JavaWeb Servlet中Filter过滤器的详解 一、什么是Filter过滤器 Filter,即过滤器,是Servlet规范中一个重要的组件,用于对Servlet容器的请求和响应进行过滤和修改。它能够拦截所有的用户请求,对请求参数、头部信息等进行检查,还可以修改请求的目标和响应内容。 二、Filter过滤器的应用场景 在JavaWeb开发中,通常会出…

    Java 2023年6月15日
    00
  • JDBC+GUI实现简单学生管理系统

    好的。首先,我们需要明确几个概念: JDBC:Java Database Connectivity,Java数据库连接技术,用于在Java程序中访问和操作数据库的API。 GUI:Graphical User Interface,图形用户界面,用于设计和实现用户交互的界面。 学生管理系统:用于管理学生信息的软件,包括学生的基本信息、成绩等。 接下来,我们详细…

    Java 2023年5月20日
    00
  • spring scheduled单线程和多线程使用过程中的大坑

    介绍 在使用Spring框架的Scheduled定时任务功能时,我们可以通过配置ThreadPoolTaskExecutor来实现多线程执行定时任务。但是在使用过程中,可能会遇到一些坑,比如在多线程执行过程中,由于任务执行的时间过长,而ThreadPoolTaskExecutor线程池中可用线程数量过少,可能造成任务阻塞,从而导致已经执行的任务无法被及时释放…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部