SpringBoot+Dynamic多數據源動態切換


最近做了個小模塊,需求就是項目同時讀取三個數據庫,操作數據。並不是分庫分表,只用定時跑,不需要對外提供接口。

技術選型:SpringBoot + Mybatis Plus(Mybatis) + Dynamic

 

1. 用MyBatis Plus 生成mapper、xml、service,生成方法

2. 引用核心jar包

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>2.4.2</version>
</dependency>

3. yml文件配置(有需要連接池配置的可以自己加)

spring:
  datasource:
    #配置hikari連接池
    hikari:
      minimum-idle: 4
      maximum-pool-size: 16
      connection-timeout: 10000
      idle-timeout: 30000
      connection-init-sql: set names utf8mb4
    #動態數據源配置
    dynamic:
      #主數據源
      primary: business
      datasource:
        #數據源1
        business:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/db_business?useUnicode=true&characterEncoding=utf-8
          username: ****
          password: ****
        #數據源2
        user:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/db_user?useUnicode=true&characterEncoding=utf-8
          username: ****
          password: ****
        #數據源3
        order:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/db_order?useUnicode=true&characterEncoding=utf-8
          username: ****
          password: ****

4. 在Service層加DS注解(注意:這個注解要加到mapper.xml文件對應的dao接口層,會報加載失敗異常

@Service
@DS(value = "user")
public class UserServiceImpl extends ServiceImpl<UserMapper, UserInfo>
        implements UserService {

}

bussines, order...庫配置是一樣的

5. 啟動類注解

@MapperScan("com.**.dao")
@ComponentScan(value = "com.**")
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {

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

6. 啟動項目,看日志輸出了如下信息,表示配置成功:

2019-12-16 20:50:52.565  INFO 12896 --- [     main] com.zaxxer.hikari.HikariDataSource       : business - Starting...
2019-12-16 20:50:53.611  INFO 12896 --- [     main] com.zaxxer.hikari.HikariDataSource       : business - Start completed.
2019-12-16 20:50:53.611  INFO 12896 --- [     main] com.zaxxer.hikari.HikariDataSource       : user - Starting...
2019-12-16 20:50:54.100  INFO 12896 --- [     main] com.zaxxer.hikari.HikariDataSource       : user - Start completed.
2019-12-16 20:50:54.100  INFO 12896 --- [     main] com.zaxxer.hikari.HikariDataSource       : order - Starting...
2019-12-16 20:50:54.607  INFO 12896 --- [     main] com.zaxxer.hikari.HikariDataSource       : order - Start completed.
2019-12-16 20:50:54.608  INFO 12896 --- [     main] c.b.d.d.DynamicRoutingDataSource         : 初始共加載 3 個數據源
2019-12-16 20:50:54.608  INFO 12896 --- [     main] c.b.d.d.DynamicRoutingDataSource         : 動態數據源-加載 business 成功
2019-12-16 20:50:54.608  INFO 12896 --- [     main] c.b.d.d.DynamicRoutingDataSource         : 動態數據源-加載 user 成功
2019-12-16 20:50:54.608  INFO 12896 --- [     main] c.b.d.d.DynamicRoutingDataSource         : 動態數據源-加載 order 成功
2019-12-16 20:50:54.609  INFO 12896 --- [     main] c.b.d.d.DynamicRoutingDataSource         : 當前的默認數據源是單數據源,數據源名為 business


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM