基于springBoot项目如何配置多数据源


前言

有时,在一个项目中会用到多数据源,现在对自己在项目中多数据源的操作总结如下,有不到之处敬请批评指正!

1.pom.xml的依赖引入

        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            mysql
            mysql-connector-java
            5.1.17
        
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
        
            org.projectlombok
            lombok
            true
        
      
        
            com.baomidou
            dynamic-datasource-spring-boot-starter
            3.3.1
        
    
        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.1
        
       
        
            io.springfox
            springfox-swagger2
            2.9.2
        
        
            io.springfox
            springfox-swagger-ui
            2.9.2
        
        
            com.github.xiaoymin
            swagger-bootstrap-ui
            1.9.6
        
        
            io.swagger
            swagger-annotations
            1.5.22
        
        
            io.swagger
            swagger-models
            1.5.22
        
        
        
            com.oracle
            ojdbc6
            11.1.0.7.0
        
        
            javax.persistence
            persistence-api
            1.0
            compile
        

2.在Springboot的application.yml中进行配置:

server:
  port: 8081
  servlet:
    context-path: /

spring:
  application:
    name: spring-boot-dynamic-demo
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
      datasource:
        master:
          url: jdbc:oracle:thin:@localhost:1521/orcl
          username: scott
          password: 123456
          driver-class-name: oracle.jdbc.driver.OracleDriver
        slave_1:
          url: jdbc:mysql://localhost:3306/lzsszhyjpt?useUnicode=true&characterEncoding=utf-8&useSSL=false
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
      logic-delete-field: deleted
  mapper-locations: classpath:/mapper/**.xml

3.多个数据源如何在业务接口中配置和使用

其中配置了两个数据源,master与sub,其中选择master作为默认数据源(对应primary配置);
若想使用sub作为部分代码的数据源,可在ServiceImpl做如下配置:
@DS("sub")
@Service
public class UserServiceImpl extends ServiceImpl implements UserService {}

4.在使用@DS注解时,有如下注意事项:

  (1)不能使用事务,否则数据源不会切换,使用的还是第一次加载的数据源;
  (2)第一次加载数据源之后,第二次、第三次…操作其它数据源,如果数据源不存在,使用的还是第一次加载的数据源;
  (3)数据源名称不要包含下划线,否则不能切换。