解决多数据源配置问题

        程序员往往都是先将代码编写完毕后自己先测试一遍,测试通过后才会找前端一起联调。今天这个问题就是出现在自我调试的过程中,记录并分享给大家。

 

一.启动注册中心并注册服务

1.启动注册中心

 

2.注册服务

 

3.验证服务是否注册成功

 

 

二、测试接口

测试接口:http://localhost:4102/dataset/data-set/add

页面以及控制台报错:

Creating a new SqlSession
Registering transaction synchronization for SqlSession [[email protected]]
JDBC Connection [[email protected]] will be managed by Spring
==>  Preparing: INSERT INTO DSE_BASE_INFO ( ID, DATA_SET_NAME, DATA_SOURCE_ID, DATA_SOURCE_NAME, REMARK, DELETE_STATUS, CREATE_USER, CREATE_TIME, UPDATE_USER, UPDATE_TIME, CREATE_VIEW_SQL, VIEW_NAME, CATALOG_ID, CATALOG_NAME ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) 
Releasing transactional SqlSession [[email protected]]
Transaction synchronization deregistering SqlSession [[email protected]]
Transaction synchronization closing SqlSession [[email protected]]
2020-06-24 09:52:45,461|ERROR|hdmp_app_web-api,,,|http-nio-4102-exec-2|c.h.i.f.w.c.ControllerBase:136|未知错误,错误类型:org.springframework.jdbc.BadSqlGrammarException: 
### Error updating database.  Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "DSE_BASE_INFO" not found; SQL statement:
 

出现问题:Table "DSE_BASE_INFO" not found,找不到这个表。

1.首先查看数据库是否有这张表。

数据库的确是有这张表的,那么查看数据库配置

2.查看数据库配置

<1>.首先查看application.yml

发现里面配置的active:local

<2>.查看applicaiton-local.yml

发现配置文件全是是放在apollo上的,数据源连接名字叫做data-datasourse

3.查看Apollo上的数据源连接

 <1>.在项目文件下找到dataa-datasource

点开查看dataa-datasource果然就是数据库连接

<2>.查看数据库连接

        数据源1:

        数据源2:

        数据源3:

这时候我找到了之前为什么报找不到表的原因,springBootApplication默认不开启多数据源支持

 

3.解决方案

<1>.启动类上夹DruidDataSourceAutoConfigure.class

@SpringBootApplication(
        scanBasePackages = "com.hikcreate.business.dataa.service.dataset"
        ,exclude = {DruidDataSourceAutoConfigure.class}
)
@MapperScan(basePackages = "com.hikcreate.business.dataa.service.dataset.infra.data.mapper")
@EnableFeignClients(basePackages = "com.hikcreate.business.dataa.service.dataset.infra.data.feign")
@EnableDiscoveryClient
public class DataSetApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(DataSetApiApplication.class, args);
    }

}

<2>.pom.xml添加苞米豆依赖使mybatis-plus支持多数据源

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.1.0</version>
</dependency>

4.验证

 

这时候就已经解决掉了多数据源的问题了。

 

三、总结

        在开发中可能会遇到多数据源的数据库连接,记住处理口诀:

         

        启动注入杜兰德,依赖引进苞米豆。

    DruidDataSourceAutoConfigure  +   baomidou