返回

SpringBoot 集成 Mybatis-plus 实现多数据源切换**

后端

多数据源:使用 SpringBoot 和 Mybatis-plus 实现

简介

随着应用程序业务的快速增长,访问和处理来自不同数据源的数据变得越来越普遍。多数据源架构为这种需求提供了一个有效解决方案,它允许隔离和管理多个数据源。在 SpringBoot 中,可以通过 Mybatis-plus 轻松实现多数据源切换。本文将深入探讨如何使用 SpringBoot 集成 Mybatis-plus 实现多数据源切换,包括配置、使用 @DS 注解以及切换数据源的代码示例。

整合 Mybatis-plus

1. 添加依赖

首先,在 pom.xml 文件中添加 Mybatis-plus 依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>

2. 配置数据源

在 application.yml 文件中配置数据源。以 MySQL 为例:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456

3. 配置扫描路径

在 mybatis-config.xml 文件中配置数据源的扫描路径:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <package>com.example.demo.entity</package>
    </typeAliases>
    <mappers>
        <mapper class="com.example.demo.mapper.UserMapper" />
    </mappers>
</configuration>

多数据源配置

在 SpringBoot 中,可以通过 @DS 注解指定数据源。在 application.yml 文件中配置多个数据源,如 MySQL 和 Oracle:

spring:
  datasource:
    primary:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8
      username: root
      password: 123456
    secondary:
      driver-class-name: oracle.jdbc.driver.OracleDriver
      url: jdbc:oracle:thin:@localhost:1521:orcl
      username: oracle
      password: oracle

在代码中使用 @DS 注解指定数据源:

@Service
public class UserService {

    @Autowired
    @DS("primary")
    private UserMapper userMapper;

    // 使用 primary 数据源进行操作
}

@Service
public class OrderService {

    @Autowired
    @DS("secondary")
    private OrderMapper orderMapper;

    // 使用 secondary 数据源进行操作
}

数据源切换

在同一方法中切换数据源时,可以使用 DynamicDataSourceContextHolder 类:

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    // 将数据源切换到 primary
    DynamicDataSourceContextHolder.push("primary");
    // 使用 primary 数据源进行操作
    DynamicDataSourceContextHolder.clear();

    // 使用 secondary 数据源进行操作
}

注意事项

  1. 配置多个数据源,确保数据源名称与 @DS 注解指定的数据源一致。
  2. 使用 DynamicDataSourceContextHolder 进行动态数据源切换。
  3. 避免在同一个事务中操作多个数据源。

常见问题解答

  1. 如何指定默认数据源?

    在 application.yml 文件中,将默认数据源配置为 spring.datasource.default。

  2. 如何检查当前使用的数据源?

    使用 DynamicDataSourceContextHolder.peek() 获取当前数据源名称。

  3. 在使用 Mybatis-plus 时如何使用多数据源?

    在 mapper 接口中使用 @DS 注解指定数据源,并在 XML 映射文件中指定表名和列名。

  4. 是否可以在同一事务中操作多个数据源?

    不建议在同一事务中操作多个数据源,因为这可能会导致数据不一致。

  5. 如何管理多数据源的连接池?

    可以使用 SpringBoot 的 Hikari 连接池配置管理多数据源的连接池。