返回

一劳永逸,手把手教您解决mybatis-plus使用多数据源时报错dynamic-datasource can not find primary datasource

后端

多数据源配置中的错误:如何解决 DynamicDataSource 找不到主数据源的问题

在使用 Mybatis-Plus 进行多数据源配置时,开发人员可能会遇到一个常见的错误提示:

DynamicDataSource 找不到主数据源。

此错误通常是由于以下原因引起的:

  • 未正确配置数据源: 在 application.yml 文件中,需要正确配置主数据源和从数据源的信息。
  • 未在 Mapper 文件中指定数据源: 在 Mapper 文件中,需要使用 @DS 注解指定数据源。
  • 未启用多数据源功能: 在 Mybatis-Plus 的配置中,需要启用多数据源功能。

解决方法

1. 正确配置数据源

在 application.yml 文件中,需要正确配置主数据源和从数据源的信息。具体配置如下:

spring:
  datasource:
    primary:
      url: jdbc:mysql://localhost:3306/primary_db
      username: root
      password: 123456
    secondary:
      url: jdbc:mysql://localhost:3306/secondary_db
      username: root
      password: 123456

2. 在 Mapper 文件中指定数据源

在 Mapper 文件中,需要使用 @DS 注解指定数据源。具体如下:

@DS("primary")
public interface PrimaryMapper {

    // 映射 SQL 语句

}

@DS("secondary")
public interface SecondaryMapper {

    // 映射 SQL 语句

}

3. 启用多数据源功能

在 Mybatis-Plus 的配置中,需要启用多数据源功能。具体如下:

mybatis-plus:
  dynamic-datasource:
    enabled: true

注意事项

  • 在配置多数据源时,需要确保主数据源和从数据源的连接信息正确。
  • 在 Mapper 文件中指定数据源时,需要确保 @DS 注解中的值与 application.yml 文件中配置的数据源名称一致。
  • 在启用多数据源功能时,需要确保 Mybatis-Plus 的版本在 3.0 以上。

总结

通过上述方法,可以解决 Mybatis-Plus 使用多数据源时报错 dynamic-datasource can not find primary datasource 的问题。希望本文能对您有所帮助。

常见问题解答

  1. 为什么需要使用多数据源?
    多数据源通常用于将不同业务的数据隔离到不同的数据库中,以提高性能和安全性。

  2. 如何指定默认数据源?
    可以在 application.yml 文件中指定默认数据源:

    spring:
      datasource:
        default: primary
    
  3. 如何使用程序化方式动态切换数据源?
    可以使用 Mybatis-Plus 提供的 DataSourceContextHolder 类动态切换数据源:

    DataSourceContextHolder.setDataSource("secondary");
    
  4. 如何处理多数据源事务?
    Mybatis-Plus 并不支持跨数据源事务,因此需要根据具体业务场景进行处理。

  5. 是否可以使用 Mybatis-Plus 实现读写分离?
    可以,可以通过在 Mapper 文件中使用 @DS 注解指定读写数据源:

    @DS("primary")
    public interface WriteMapper {
    
        // 写入操作
    
    }
    
    @DS("secondary")
    public interface ReadMapper {
    
        // 读取操作
    
    }