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

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

一.背景

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

二.依赖


org.springframework.boot
spring-boot-starter-parent
2.1.5.RELEASE




     
         org.springframework.boot
         spring-boot-starter-test
         test
     

     
         org.springframework.boot
         spring-boot-starter
     

     
         cn.humingfeng
         dynamic-datasource-spring-boot-starter
         1.3.4
     

    
        com.baomidou
        mybatis-plus-boot-starter
        3.3.2
    

     
         com.alibaba
         druid-spring-boot-starter
         1.1.10
     

     
         mysql
         mysql-connector-java
         5.1.38
     

三.配置

在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");
  }
}

你可能感兴趣的:(framework,springboot,mybatis-plus,druid,多数据源)