1. 程式人生 > 其它 >基於springBoot專案如何配置多資料來源

基於springBoot專案如何配置多資料來源

前言

有時,在一個專案中會用到多資料來源,現在對自己在專案中多資料來源的操作總結如下,有不到之處敬請批評指正!

1.pom.xml的依賴引入

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--mysql驅動包的引入-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.17</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
      <!-- 苞米豆的dynamic-datasource-spring-boot-starter:-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
    <!-- mybatisPlus包的匯入-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
       <!-- 引入swagger-bootstrap-ui包 /doc.html-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.22</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.22</version>
        </dependency>
        <!-- 引入oracle包 /doc.html-->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.1.0.7.0</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0</version>
            <scope>compile</scope>
        </dependency>

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<UserMapper, User> implements UserService {}

4.在使用@DS註解時,有如下注意事項:

  (1)不能使用事務,否則資料來源不會切換,使用的還是第一次載入的資料來源;
  (2)第一次載入資料來源之後,第二次、第三次…操作其它資料來源,如果資料來源不存在,使用的還是第一次載入的資料來源;
  (3)資料來源名稱不要包含下劃線,否則不能切換。
古今成大事者,不唯有超世之才,必有堅韌不拔之志!