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日

相关文章

  • springboot 自定义启动器的实现

    Spring Boot自定义启动器的实现 Spring Boot是一个流行的Java框架,可以帮助开发人员快速构建和部署应用程序。Spring Boot提供了许多内置的启动器,可以帮助我们快速集成常用的框架和库。除了内置的启动器之外,我们还可以创建自定义的启动器,以便在应用程序中重复使用自定义的配置和依赖关系。本文将详细讲解如何创建Spring Boot自定…

    Java 2023年5月14日
    00
  • Java NIO和IO的区别

    Java NIO和IO是两种处理I/O操作的不同方式,Java NIO提供了一种高效的、基于缓冲区的I/O操作,而传统的Java IO则是基于流式(stream-based)的方式。 以下是Java NIO和IO的几个重要区别: 缓冲区(Buffer)与流(Stream)的区别 Java IO是面向流的编程,数据从一个地方流动到另一个地方,通常是通过Inpu…

    Java 2023年5月19日
    00
  • 在JPA的@Query注解中使用limit条件(详解)

    下面是“在JPA的@Query注解中使用limit条件(详解)”的完整攻略: 1. 简介 在关系型数据库的查询语句中,LIMIT条件用于限制查询结果的数量。在JPA中,我们可以使用@Query注解来自定义查询语句。本文将介绍如何在@Query注解中使用limit条件来限制查询结果数量。 2. 使用@Query注解中的limit条件 在使用@Query注解时,…

    Java 2023年5月20日
    00
  • 使用Spring Boot的原因解析

    使用Spring Boot的原因解析 前言 Spring Boot 是 Spring 家族的一个全新项目,它通过提供自动配置、快速开发等一系列优化,使得 Spring 应用的开发更加简单、快速、便捷。那么为什么我们要选择使用 Spring Boot 呢?下面本文将从以下几个方面为大家详细介绍 Spring Boot 的使用原因。 解析 1. 自动配置 Spr…

    Java 2023年5月15日
    00
  • 项目启动tomcat失败的几种可能原因和解决方法(小结)

    下面我将详细讲解“项目启动Tomcat失败的几种可能原因和解决方法(小结)”的完整攻略。 项目启动Tomcat失败的几种可能原因和解决方法(小结) 1. 端口占用 如果当前端口被其他程序占用,启动Tomcat将会失败。可以通过以下方式查看当前端口占用情况: # Windows 系统 netstat -ano | findstr 端口号 # Linux/Mac…

    Java 2023年5月19日
    00
  • SpringBoot深入分析webmvc和webflux的区别

    下面是关于“SpringBoot深入分析webmvc和webflux的区别”的完整攻略,包含两个示例说明。 SpringBoot深入分析webmvc和webflux的区别 SpringBoot是一个流行的Java开发框架,它提供了许多功能和特性来简化Java应用程序的开发。其中,SpringBoot的Web框架有两种选择:webmvc和webflux。本文将…

    Java 2023年5月17日
    00
  • springboot实现全局异常处理及自定义异常类

    一、背景简介 在SpringBoot的应用开发过程中,异常处理显得尤为关键。当系统运行出现意外情况时,能够及时捕获异常、快速定位问题和提供友好的提示信息,是系统健壮性和用户体验的保障。本文将介绍如何使用SpringBoot实现全局异常处理并自定义异常类,帮助开发人员快速高效地处理异常信息。 二、目标 实现全局异常处理,处理系统的所有异常,包括运行时异常和非运…

    Java 2023年5月27日
    00
  • Java FileUploadUtil工具类详解

    Java FileUploadUtil工具类详解 简介 FileUploadUtil是一个Java的上传文件工具类,提供了一些上传文件操作的辅助方法,如将上传的文件保存到服务器上指定的路径,获取上传文件的名称和大小等信息等。 使用方法 1. 导入工具类 首先需要将FileUploadUtil类导入到自己的项目中。 2. 初始化上传配置 在使用之前,需要初始化…

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