Spring Boot 实现动态数据源配置

前言

之前在CSDN博客以及某站看了教程,不免觉得有点不知如何下手,好在最后融合了以下,得出了一个比较简单的配置动态数据源的过程。

首先项目是Spring Boot的单体项目,我们的需求是要连接多个数据库,那么就需要配置多个数据源。接下来我会写清楚每一个步骤,让大家掌握这个技术。

 注意:不论数据库是Mysql 还是 SqlServer,原理是一样的!

目录

 一.引入依赖

 二.找到你的 Dao 或者是 Mapper文件

三.运行你的程序


 一.引入依赖

在pom文件中引入动态数据源配置依赖:

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>

注意:确保你的项目已经引入了 MySQL 或者是 SQL server的依赖! 比如我的数据库是SQL server,我就引入了以下依赖:

        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>8.4.0.jre8</version>
            <scope>runtime</scope>
        </dependency>

除此之外:还需要有 Mybatis 的依赖:

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

然后找到我们项目的 application.yml 或者是 application.properties 文件

严格按照如下格式进行数据源的配置:

spring:
  datasource:
    dynamic:
      #设置默认的数据源或者数据源组,默认值即为master
      primary: master
      #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      strict: false
      datasource:
        master:
          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
          url: jdbc:sqlserver://xxx.xxx.x.x:1433;DatabaseName=xxx
          username: xxx
          password: xxx
        slave:
          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
          url: jdbc:sqlserver://xxx.xxx.x.x:1433;DatabaseName=xxx
          username: xxx
          password: xxx
        slave2:
          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
          url: jdbc:sqlserver://xxx.xxx.x.x:1433;DatabaseName=xxx
          username: xxx
          password: xxx

注意:一定严格按照以上格式,如果你的文字在代码后面,也是会报错的!

 二.找到你的 Dao 或者是 Mapper文件

也就是找到你的 Mapper 注解所在地

我们通常会在这个接口中定义我们的方法,并且提供给 Service 层来使用

那么现在只需要在接口中的方法上,加上所对应的数据源注解:@DS( )。

比如我用户名和密码存在了 master 数据源中,那么我 UserDao 中定义的方法,只要是用到了用户名和密码的都需要在 master 数据源中进行查找

这里的 master 和 slave 是在配置数据源的 yml 或 properties文件中自定义的,这个字段你可以自定义。

三.运行你的程序

直接运行,会看到 控制台中显示 : maser Start....  slave Start....

如果报错了,请仔细检查你的数据源配置中的 url 和 数据库的用户名以及密码,百分之九十都是自己的配置错误了。


Good Bye~!

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot支持动态数据源配置,可以根据需要动态地切换数据源。以下是动态数据源配置的步骤: 1. 在pom.xml文件中添加依赖: ```xml <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> ``` 2. 配置数据源,在application.properties文件中添加以下配置: ```properties spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/db?characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.hikari.username=root spring.datasource.hikari.password=123456 ``` 3. 创建多个数据源,在配置类中添加以下配置: ```java @Configuration public class DataSourceConfig { @Bean(name = "dataSource1") @ConfigurationProperties(prefix = "spring.datasource.hikari.datasource1") public DataSource dataSource1() { return DataSourceBuilder.create().type(HikariDataSource.class).build(); } @Bean(name = "dataSource2") @ConfigurationProperties(prefix = "spring.datasource.hikari.datasource2") public DataSource dataSource2() { return DataSourceBuilder.create().type(HikariDataSource.class).build(); } } ``` 4. 创建动态数据源,在配置类中添加以下配置: ```java @Configuration public class DynamicDataSourceConfig { @Bean(name = "dynamicDataSource") public DynamicDataSource dynamicDataSource(@Qualifier("dataSource1") DataSource dataSource1, @Qualifier("dataSource2") DataSource dataSource2) { Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put("dataSource1", dataSource1); targetDataSources.put("dataSource2", dataSource2); return new DynamicDataSource(dataSource1, targetDataSources); } } ``` 5. 创建动态数据源切换类,在配置类中添加以下配置: ```java public class DynamicDataSource extends AbstractRoutingDataSource { private static final ThreadLocal<String> contextHolder = new ThreadLocal<>(); public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) { super.setDefaultTargetDataSource(defaultTargetDataSource); super.setTargetDataSources(targetDataSources); super.afterPropertiesSet(); } @Override protected Object determineCurrentLookupKey() { return contextHolder.get(); } public static void setDataSource(String dataSource) { contextHolder.set(dataSource); } public static void clearDataSource() { contextHolder.remove(); } } ``` 6. 在需要切换数据源的地方,调用DynamicDataSource.setDataSource("dataSource1")或DynamicDataSource.setDataSource("dataSource2")方法切换数据源。 以上就是Spring Boot动态数据源配置的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值