天天看點

SpringBoot 多資料源切換(超級簡單)

作者:頑強小貓BX

背景:主從架構下,資料庫的讀寫分離

1. 依賴

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>

	<dependency>
		<groupId>com.mysql</groupId>
		<artifactId>mysql-connector-j</artifactId>
		<scope>runtime</scope>
	</dependency>
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<optional>true</optional>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>com.baomidou</groupId>
		<artifactId>mybatis-plus-boot-starter</artifactId>
		<version>3.5.3</version>
	</dependency>
    <!--引入baomidou的切換資料源的依賴-->
	<dependency>
		<groupId>com.baomidou</groupId>
		<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
		<version>3.6.1</version>
	</dependency>
</dependencies>
           

2.配置資料源

spring:
  datasource:
    dynamic:
      primary: master
      strict: true
      datasource:
        master:
          url: jdbc:mysql://127.0.0.1:3307/user1?useUnicode=true&characterEncoding=utf8&useSSL=false
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
        slave_1:
          url: jdbc:mysql://127.0.0.1:3308/user1?useUnicode=true&characterEncoding=utf8&useSSL=false
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
           

3. 使用 (使用 @DS 切換資料源。)

@DS 可以注解在方法上或類上,同時存在就近原則 方法上注解 優先于 類上注解。           
注解 結果
沒有@DS 預設資料源
@DS(“dsName”) dsName可以為組名也可以為具體某個庫的名稱

4.例 :用在serviceimpl上

@Override
    @DS("slave_1")
    public List<User> query() {
        return userDao.selectList(null);
    }

    /**
     * 新增資料
     *
     * @param user 執行個體對象
     * @return 執行個體對象
     */
    @Override
    @DS("master")
    public User insert(User user) {
        this.userDao.insert(user);
        return user;
    }
           
SpringBoot 多資料源切換(超級簡單)

為了區分資料不一樣,兩個資料庫未做主從同步

master的資料
SpringBoot 多資料源切換(超級簡單)
slave_1的資料
SpringBoot 多資料源切換(超級簡單)

5.用postman進行測試

擷取資料,可以看到是slave_1的資料
SpringBoot 多資料源切換(超級簡單)
添加資料,可以看到添加到master中了
SpringBoot 多資料源切換(超級簡單)
SpringBoot 多資料源切換(超級簡單)

完成~~~