背景
我的项目中须要连贯多个数据源,可能是一主多从,或者不同的多数据源,或者多个不同类型的数据源如我的项目中有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.数据源名称最好不要蕴含下滑线,下滑线的数据源切换不了