天天看点

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);

}

}

继续阅读