当前位置:   article > 正文

SpringBoot多数据源切换_springboot多数据源配置和切换

springboot多数据源配置和切换

多数据源配置,如果使用的是mybatis-plus,可以整合同样是mybatis-plus开发的jar包dynamic-datasource,可以很简单的通过注解做数据库切换。

官方地址:
https://baomidou.com/pages/a61e1b/#dynamic-datasource

简介:

  • 支持数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。
  • 支持数据库敏感配置信息 加密 ENC()。
  • 支持每个数据库独立初始化表结构schema和数据库database。
  • 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。
  • 支持 自定义注解 ,需继承DS(3.2.0+)。
  • 提供并简化对Druid,HikariCp,BeeCp,Dbcp2的快速集成。
  • 提供对Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等组件的集成方案。
  • 提供 自定义数据源来源 方案(如全从数据库加载)。
  • 提供项目启动后 动态增加移除数据源 方案。
  • 提供Mybatis环境下的 纯读写分离 方案。
  • 提供使用 spel动态参数 解析数据源方案。内置spel,session,header,支持自定义。
  • 支持 多层数据源嵌套切换 。(ServiceA >>> ServiceB >>> ServiceC)。
  • 提供 **基于seata的分布式事务方案。
  • 提供 本地多数据源事务方案。

引入pom:

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

如果需要连不同的数据库,需要引入各个数据库的连接依赖包

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

  <!-- sqlserver-->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>8.4.1.jre8</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

yml配置:

spring:
  datasource:
    dynamic:
      primary: db1 #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        db1:
          url: jdbc:sqlserver://localhost:1433;DatabaseName=inventory_engine
          username: root
          password: xxx
          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver  # 3.2.0开始支持SPI可省略此配置
        db2:
          url: jdbc:mysql://localhost:3306/inventory_engine?characterEncoding=utf-8&serverTimezone=UTC
          username: root
          password: xxx
          driver-class-name: com.mysql.cj.jdbc.Driver  # 3.2.0开始支持SPI可省略此配置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

新建DB1Service类,用于验证是否可以切换不同的数据源对数据库进行操作,在db1中建了表test1,包含字段user_name,sex,在db2中建了表test2,字段name,sex

在方法上使用@DS注解,即可实现数据源的切换,此注解可以用在类上或者方法上,方法上的注解优先于类上注解

@Service
public class DB1Service {

    @Autowired
    private JdbcTemplate jdbcTemplate;


    public void insertTest1(){
        jdbcTemplate.execute("insert into test1(user_name,sex) values ('zhangsan',1)");
    }

    @DS("db2")
    public void insertTest2(){
        jdbcTemplate.execute("insert into test2(name,sex) values ('lisi',1)");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
注解结果
没有@DS默认数据源
@DS(“dsName”)dsName可以为组名也可以为具体某个库的名称

新建测试Controller,模拟接口调用

@RestController
public class MyController {

    @Autowired
    private DB1Service db1Service;

    @RequestMapping("/test")
    public String test(){
        db1Service.insertTest1();
        db1Service.insertTest2();
        return "hello,world";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结果:
test1表:
在这里插入图片描述

test2表:
在这里插入图片描述

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号