Caused by: java.lang.RuntimeException: 请检查primary默认数据库设置

问题引入

应用运行失败:
在这里插入图片描述

问题分析

 从ERROR日志最后往前看,由于异常(msg:“请检查primary默认数据库设置”)导致调用DynamicDataSourceAutoConfiguration类init方
法失败,导致DataSourceHealthIndicatorAutoConfiguration类bean创建失败,导致healthIndicatorRegistry类bean创建失败,导致
healthEndpoint类bean创建失败,最终导致servletEndpointRegistrar类bean创建失败。
  大概意思就是说,由于某个异常导致bean创建失败,应用启动失败。所以我们要分析这个异常

异常分析

在这里插入图片描述

DynamicRoutingDataSource类第200行:
根据下图分析:分组数据库和所有数据库都没有配置primary数据库,也就是首要数据库。
在这里插入图片描述

解决方法

发现项目引入了下面2个依赖:用来实现多数据源配置。发现Apollo配置并没有相关配置,所以出现异常,补充配置即可解决问题。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>2.5.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>

引入新概念

SpringBoot + Mybatis-plus实现多数据源配置。即一个项目中使用多个数据源。由于第一次遇见,所以查阅了相关资料,总结了其用法。

1,引入相关依赖:dynamic-datasource-spring-boot-starter 和 druid-spring-boot-starter。
2,yml文件配置:

spring:
  datasource:
    #需要使用的数据库连接池实现,全限定名称.此处使用Druid,可以不用自己写配置,自己也可以自定义配置
    type: com.alibaba.druid.pool.DruidDataSource
    #JDBC 驱动程序的完全限定名称
    driver-class-name: com.mysql.jdbc.Driver
    #动态数据源
    dynamic:
      #首要数据库,默认使用哪个数据库
      primary: db1
      datasource:
        db1:
          url: jdbc:mysql://abc-dbrw.cn:3306/user?useUnicode=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&characterEncoding=UTF-8
          username: aaa_rw
          password: uoj8ijoifdoi
        db2:
          url: jdbc:mysql://def-dbwrite.cn:3306/order?useUnicode=true&characterEncoding=utf8&useSSL=false
          username: bbb_rw
          password: oifjdsoi9hiun

3,.在不同的类使用不同的数据源时加上注解 @DS(“数据源名称”)

//注意是Mybatis-plus中的写法
@Repository
@DS("db2")
public class UserService extends ServiceImpl<UserMapper, User> {
    
    

思考

1,多数据源是如何实现的,源码解析。
提示:
Spring相关的东西直接从XxxConfiguration, XxxProperties, XxxAutoProperties入手即可。
所以这个问题可以直接从dynamic-datasource-spring-boot-starter\2.5.1\dynamic-datasource-spring-boot-starter-2.5.1.jar包下找这3个类,入手即可。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Edward_hjh/article/details/127268337
今日推荐