天天看點

spring boot多資料源--dynamic-datasource-spring-boot-starter

作者:Jason0310

前幾天介紹了spring boot用AOP切片實作多資料源管理,今天介紹一下用dynamic-datasource-spring-boot-starter實作多資料源,相對AOP切片方式,這種實作起來更簡單,隻需要引入依賴,在application配置檔案進行相應配置,就可以在代碼中使用注解實作資料源切換。

dynamic-datasource-spring-boot-starter是一個基于springboot的快速內建多資料源的啟動器,它可以友善地實作資料源的動态切換和主從分離,支援多種資料庫類型,如oracle和mysql。

要使用dynamic-datasource-spring-boot-starter實作多資料源管理,隻需要以下幾個步驟:

在springboot項目中添加dynamic-datasource-spring-boot-starter的依賴和druid連接配接池依賴,如下所示:

<dependency>

<groupId>com.baomidou</groupId>

<artifactId>dynamic-datasource-spring-boot-starter</artifactId>

<version>3.4.0</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>1.2.6</version>

</dependency>

在application.yml檔案中配置資料源資訊,如下所示:

spring:

datasource:

dynamic:

primary: master # 設定預設的資料源或者資料源組,預設值即為master

datasource:

master:

url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic

username: root

password: 123456

driver-class-name: com.mysql.jdbc.Driver

type: com.alibaba.druid.pool.DruidDataSource # 指定資料源類型為druid

druid: # 配置druid的屬性

initial-size: 5 # 初始化連接配接數

min-idle: 5 # 最小空閑連接配接數

max-active: 20 # 最大活躍連接配接數

max-wait: 60000 # 擷取連接配接的最大等待時間,機關毫秒

# 其他屬性省略

slave_1:

url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic

username: root

password: 123456

driver-class-name: com.mysql.jdbc.Driver

type: com.alibaba.druid.pool.DruidDataSource

druid:

initial-size: 5

min-idle: 5

max-active: 20

max-wait: 60000

# 其他屬性省略

oracle:

url: jdbc:oracle:thin:@//xx.xx.xx.xx:1521/dynamic

username: root

password: 123456

driver-class-name: oracle.jdbc.OracleDriver

type: com.alibaba.druid.pool.DruidDataSource

druid:

initial-size: 5

min-idle: 5

max-active: 20

max-wait: 60000

# 其他屬性省略

在代碼中使用@DS注解來指定使用哪個資料源,如下所示:

@Service

public class UserServiceImpl implements UserService {

@Autowired

private UserMapper userMapper;

@Override

@DS("slave_1") // 使用slave_1資料源

public List<User> list() {

return userMapper.selectList(null);

}

@Override

@DS("master") // 使用master資料源

public boolean save(User user) {

return userMapper.insert(user) > 0;

}

@Override

@DS("oracle") // 使用oracle資料源

public User getById(Long id) {

return userMapper.selectById(id);

}

}

繼續閱讀