背景

我的项目中须要连贯多个数据源,可能是一主多从,或者不同的多数据源,或者多个不同类型的数据源如我的项目中有mysql库也有oracle库

解决

可借助mybatis-plus的多数据源解决形式
参见:https://baomidou.com/guide/dy...

具体配置

1.pom配置

<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version></dependency><dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.5.5</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency>

2.mybatis扫描地址配置

mybatis的扫描地址

mybatis:  type-aliases-package: com.cv.model  mapper-locations: classpath:mybatis/mappers/**/*.xmlconfig类上或者启动类上@MapperScan(basePackages = {"com.cv.dao"})

3.数据源配置

spring:  datasource:    dynamic:      primary: master      strict: false      hikari:        min-idle: 10        idle-timeout: 60000        max-pool-size: 20        connection-timeout: 60000        connection-test-query: SELECT 1        max-lifetime: 0      datasource:        master:          type: com.zaxxer.hikari.HikariDataSource          url: jdbc:mysql://ip:port/instance?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull          username:           password:           driverClassName: com.mysql.cj.jdbc.Driver        slave:          type: com.zaxxer.hikari.HikariDataSource          url: jdbc:mysql://ip:port/instance?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull          username:           password:           driverClassName: com.mysql.cj.jdbc.Driver        orc:          hikari:            min-idle: 10            idle-timeout: 180000            max-pool-size: 20            connection-timeout: 30000            connection-test-query: SELECT 1 from dual            max-lifetime: 1800000          url: jdbc:oracle:thin:@ip:port          username:           password:           driverClassName: oracle.jdbc.driver.OracleDriver

4.切换数据源

import com.baomidou.dynamic.datasource.annotation.DS;@DS("stat")@DS能够注解在办法上、类上、接口、枚举,同时存在办法注解优先于类上注解。

5.须要留神的问题

波及须要切换数据源时      1.不能应用事务,否则数据源不会切换,应用的还是是第一次加载的数据源 。  删除 操作多数据源的办法或者类、接口 上的 注解 @Transactional() 即可。      2.第一次加载的数据源之后,第二次(第三次...)操作其它数据源,如果数据源不存在,应用的还是第一次加载的数据源      3.数据源名称最好不要蕴含下滑线,下滑线的数据源切换不了