美文网首页
springboot常用starter⑦-dynamic-dat

springboot常用starter⑦-dynamic-dat

作者: 一个好汉 | 来源:发表于2021-07-12 23:45 被阅读0次

前言

实操项目过程中难免要配置多个数据源
例如 业务量↑ -> 数据库拆分/引入其他数据库 -> 配置多个数据源

配置多个数据源起因

多数据源配置方式

原始方式

  1. 自己通过在yml中配置多个数据库
  2. 自己创建多个DataSource

JdbcTemplate配置方式

  1. 引用不同的DataSource创建不同的JdbcTemplate
  2. 用到的时候引用不同的JdbcTemplate

mybatis配置方式

主要是使用注解指定数据源跟指定mapper对应的路径
@MapperScan(basePackages ="com.web.ds2..dao", sqlSessionTemplateRef = "ds2SqlSessionTemplate")
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath
:com/..路径../
/.xml"));

dynamic-datasource

入门

  1. 引入dynamic-datasource-spring-boot-starter
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
  1. 配置数据源
spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        master:
          url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
          username: username
          password: password
          driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
        slave_1:
          url: jdbc:mysql://127.0.0.1:13306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
          username: username
          password: password
          driver-class-name: com.mysql.cj.jdbc.Driver
  1. 使用 @DS 切换数据源
/**
 * 用户服务层
 */
public interface UserService {
    List selectAll();

    @DS("slave_1")
    List selectByCondition();
}
import com.baomidou.dynamic.datasource.annotation.DS;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 用户服务实现
 */
@Service
public class UserServiceImpl implements UserService {

    @Resource
    private JdbcTemplate jdbcTemplate;

    @Override
    public List selectAll() {
        return jdbcTemplate.queryForList("select * from member");
    }

    @Override
    @DS("slave_1")
    public List selectByCondition() {
        return jdbcTemplate.queryForList("select * from member where id < 10");
    }
}

  1. 测试验证


    selectAll
selectByCondition

参考

  1. SpringBoot多数据源配置详细教程
  2. 使用dynamic-datasource-spring-boot-starter做多数据源及源码分析
  3. dynamic-datasource_付费文档

额外资料

在typora中画流程的语句

graph LR;
    业务量+-->数据库拆分/引入其他数据库;
    数据库拆分/引入其他数据库-->配置多个数据源;
流程图语句

相关文章

网友评论

      本文标题:springboot常用starter⑦-dynamic-dat

      本文链接:https://www.haomeiwen.com/subject/mypmultx.html