当前位置: 代码迷 >> 综合 >> springboot + mybatis plus + druid多数据源用法
  详细解决方案

springboot + mybatis plus + druid多数据源用法

热度:66   发布时间:2023-10-19 01:43:13.0

一、添加依赖

<!-- Alibaba Druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.22</version>
</dependency>

<!-- MyBatis Plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.1</version>
</dependency>

<!-- MySQL -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.19</version>
</dependency>

<!--多数据源—>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.2.1</version>
</dependency>

二、排除Druid的原生配置类(否则使用的是druid原生配置,而不是动态配置的多数据源)

在工程启动类上加如下代码:

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)

三、数据源配置

一般配置在application.yml:

# 默认数据源

spring.datasource.dynamic.primary = user

# 设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源

spring.datasource.dynamic.strict = true

# user库配置

spring.datasource.dynamic.datasource.user.username = zhangsan

spring.datasource.dynamic.datasource.user.password = 123456

spring.datasource.dynamic.datasource.user.driver-class-name = com.mysql.cj.jdbc.Driver

spring.datasource.dynamic.datasource.user.url = jdbc:mysql:replication://*******:3306/user?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai

spring.datasource.dynamic.datasource.user.druid.initial-size = 10

spring.datasource.dynamic.datasource.user.druid.max-active = 20

spring.datasource.dynamic.datasource.user.druid.min-idle = 10

spring.datasource.dynamic.datasource.user.druid.validation-query = select 1

spring.datasource.dynamic.datasource.user.druid.test-on-borrow = false

spring.datasource.dynamic.datasource.user.druid.test-on-return = false

spring.datasource.dynamic.datasource.user.druid.test-while-idle = true

spring.datasource.dynamic.datasource.user.druid.time-between-eviction-runs-millis = 5000

spring.datasource.dynamic.datasource.user.druid.min-evictable-idle-time-millis = 30000

spring.datasource.dynamic.datasource.user.druid.default-auto-commit = false

spring.datasource.dynamic.datasource.user.druid.default-read-only = false

spring.datasource.dynamic.datasource.user.druid.log-abandoned = true

spring.datasource.dynamic.datasource.user.druid.max-wait = 30000

spring.datasource.dynamic.datasource.user.druid.max-open-prepared-statements = 20

# order库配置

spring.datasource.dynamic.datasource.order.username = lisi

spring.datasource.dynamic.datasource.order.password = 123456

spring.datasource.dynamic.datasource.order.driver-class-name = com.mysql.cj.jdbc.Driver

spring.datasource.dynamic.datasource.order.url = jdbc:mysql://*******:3306/order?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai

spring.datasource.dynamic.datasource.order.druid.async-init = true

spring.datasource.dynamic.datasource.order.druid.initial-size = 10

spring.datasource.dynamic.datasource.order.druid.max-active = 20

spring.datasource.dynamic.datasource.order.druid.min-idle = 10

spring.datasource.dynamic.datasource.order.druid.validation-query = select 1

spring.datasource.dynamic.datasource.order.druid.test-on-borrow = false

spring.datasource.dynamic.datasource.order.druid.test-on-return = false

spring.datasource.dynamic.datasource.order.druid.test-while-idle = true

spring.datasource.dynamic.datasource.order.druid.time-between-eviction-runs-millis = 5000

spring.datasource.dynamic.datasource.order.druid.min-evictable-idle-time-millis = 30000

spring.datasource.dynamic.datasource.order.druid.default-auto-commit = false

spring.datasource.dynamic.datasource.order.druid.default-read-only = false

spring.datasource.dynamic.datasource.order.druid.log-abandoned = true

spring.datasource.dynamic.datasource.order.druid.max-wait = 30000

spring.datasource.dynamic.datasource.order.druid.max-open-prepared-statements = 20

四、多数据源的使用

@DS 注解使用介绍:

1.@DS可以用在类或者方法上,同时使用的话方法优先级更高;

2.没有@DS,则使用默认数据源;

3.@DS("ds_name") ,ds_name为配置的组名,即spring.datasource.dynamic.datasource.之后的名字,一般为可以标示数据库的名字

@Service
@DS("user")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic List<User> getByUserIds(Long userIds) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.in(CollectionUtils.isNotEmpty(userIds), "user_id", userIds);return this.list(queryWrapper);}@DS("user")@Overridepublic User getByUserId(Long userId) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("user_id", userId);return this.getOne(queryWrapper);}
}

  相关解决方案