Springboot+MyBatis-Plus+druid多数据源配置实现

Springboot+MyBatis-Plus+druid多数据源配置实现

一.背景

业务上需求或者业务的扩展需要分库,多数据源的配置使用在业务开发中常常会用到。MyBatis-plus官网(https://mp.baomidou.com/guide/dynamic-datasource.html)对如何配置多数据源给出了范例,但对于整合druid数据库连接池却没有具体的实施范例。
线上关于整合这几个框架的博文处于互抄的状态,笔者亲自验证都没能实现,且实现复杂。本篇宗旨快速集成三大框架,少走弯路。

二.依赖

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<!--测试类-->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
     </dependency>
<!--Web启动类,可以进行restful风格接口注解-->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter</artifactId>
     </dependency>
<!--多数据源依赖-->
     <dependency>
         <groupId>cn.humingfeng</groupId>
         <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
         <version>1.3.4</version>
     </dependency>
<!--mybatis-plus依赖-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.3.2</version>
    </dependency>
<!--druid连接池依赖 -->
     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid-spring-boot-starter</artifactId>
         <version>1.1.10</version>
     </dependency>
<!--MySQL依赖 -->
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.38</version>
     </dependency>
</dependencies>

三.配置

在application.properties中配置mysql数据库相关配置(从库配置可配多个):
PS:master与slave为库名

 ########################## 多数据源配置###############################
## druid连接池配置
# 默认数据源
spring.datasource.dynamic.primary=master
# 主库配置 master
spring.datasource.dynamic.datasource.master.username=
spring.datasource.dynamic.datasource.master.password=
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.master.url=
spring.datasource.dynamic.datasource.master.druid.initial-size=5
spring.datasource.dynamic.datasource.master.druid.max-active=20
spring.datasource.dynamic.datasource.master.druid.min-idle=5
spring.datasource.dynamic.datasource.master.druid.max-wait=60000
spring.datasource.dynamic.datasource.master.druid.min-evictable-idle-time-millis=300000
spring.datasource.dynamic.datasource.master.druid.max-evictable-idle-time-millis=300000
spring.datasource.dynamic.datasource.master.druid.time-between-eviction-runs-millis=60000
# 从库配置 slave
spring.datasource.dynamic.datasource.slave.username=
spring.datasource.dynamic.datasource.slave.password=
spring.datasource.dynamic.datasource.slave.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.slave.url=
spring.datasource.dynamic.datasource.slave.druid.initial-size=5
spring.datasource.dynamic.datasource.slave.druid.max-active=20
spring.datasource.dynamic.datasource.slave.druid.min-idle=5
spring.datasource.dynamic.datasource.slave.druid.max-wait=60000
spring.datasource.dynamic.datasource.slave.druid.min-evictable-idle-time-millis=300000
spring.datasource.dynamic.datasource.slave.druid.max-evictable-idle-time-millis=300000
spring.datasource.dynamic.datasource.slave.druid.time-between-eviction-runs-millis=60000
############################# 多数据源配置##############################

四.编码

使用@DS注解切换数据源。@DS可用于方法和类上,同时存在方法注解优先于类上注解。
官网推荐注解在service层使用,且是实现类上使用,在接口层无效。

注解结果
没有@DS默认数据源
@DS(“dsName”)dsName可以为组名也可以为具体某个库名

注解 结果
没有@DS 默认数据源
@DS(“dsName”) dsName可以为组名也可以为具体某个库名
PS:当dsName为组名时,则切换时采用负载均衡算法切换

@Service
public class UserServiceImpl implements UserService {
 
  @Autowired
  private JdbcTemplate jdbcTemplate;
 
  public List selectAll() {
    return  jdbcTemplate.queryForList("select * from user");
  }
  
  @Override
  @DS("slave")
  public List selectByCondition() {
    return  jdbcTemplate.queryForList("select * from user where age >10");
  }
}

版权声明:本文为sunrise_zhu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。