springboot +mybatis-plus 动态切换数据库 ,数据库连接信息存入表中 超简单。

5 篇文章 0 订阅

如果是 mybatis 的话,这篇博客讲的很清楚:传送阵

还有一遍文章讲的 mybatis-puls 多数据源 非常好:传送阵

开始之前最好是先过一遍 mybatis-puls 官网讲的多数据源文档:传送阵

在重点看看 数据源的 增 删 改 查 :传送阵

上面 信息不看 也可以 主要是看下面这个动态数据源,上面的看看,可以加深理解。

在看看这个 动态数据源 基本就可以了:传送阵

springboot-mybatis-puls 项目搭建 自行搭建吧,推荐一个博客讲的比较好:传送阵

接下来就是代码环节了,特少

创建一个 储存数据库连接信息的表

CREATE TABLE `yx_substation` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `ip_address` varchar(255) DEFAULT NULL COMMENT 'ip地址',
  `port` varchar(10) DEFAULT NULL COMMENT '端口号',
  `account` varchar(255) DEFAULT NULL COMMENT '数据库账号',
  `password` varchar(255) DEFAULT NULL COMMENT '数据库密码',
  `database_name` varchar(255) DEFAULT NULL COMMENT '数据库名称',
  `mark` varchar(255) DEFAULT NULL COMMENT '分站标识',
  `create_time` datetime DEFAULT NULL COMMENT '添加时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='分站表';

依赖

<!-- SpringBoot 核心包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
       <!--测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--连接数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--mybatis-puls 依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-core -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-core</artifactId>
            <version>3.4.2</version>
        </dependency>

        <!--mybatis-puls 代码生成依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>

        <!--多数据源 依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

添加配置信息
这个 看完基本就会了:https://www.yuque.com/fishball-sdk5o/uszavm/qhoym4

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      datasource:
        master:
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/yshop_cloud_mall?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true

创建实体类 和 语雀上面的文档一样

package com.example.source.entity;

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class DataSourceDTO {

    //连接池名称,如slave_1
    private String pollName;
    private String driverClassName;
    private String url;
    private String username;
    private String password;

}

控制层代码

package com.example.source.controller;

import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.creator.DataSourceCreator;
import com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
import com.example.source.entity.DataSourceDTO;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.sql.DataSource;
import java.util.Set;

@RestController
@AllArgsConstructor
@RequestMapping("/data")
public class LoadController {

    private final DataSource dataSource;
    private final DataSourceCreator dataSourceCreator; //3.3.1及以下版本使用這個
    //private final DefaultDataSourceCreator dataSourceCreator; //3.3.2及以上版本使用這個
    private final DruidDataSourceCreator druidDataSourceCreator;

    /**
     * 获取当前所有数据源
     * @return
     */
    @GetMapping
    public Set<String> now() {
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        return ds.getCurrentDataSources().keySet();

    }


   /**
     * 添加数据源
     * @return
     */
    @PostMapping("/add")
    public Set<String> add(DataSourceDTO dto) {

        DataSourceProperty dataSourceProperty = new DataSourceProperty();

        BeanUtils.copyProperties(dto, dataSourceProperty);
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        DataSource dataSource = dataSourceCreator.createDataSource(dataSourceProperty);
        ds.addDataSource(dto.getPollName(), dataSource);
        return ds.getCurrentDataSources().keySet();
    }
   /**
     * 删除数据源
     * @return
     */
    @PostMapping("remove")
    public String remove(String name) {
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        ds.removeDataSource(name);
        return "删除成功";
    }
}

随便写一个 查看数据库表 信息的Controller层测试使用
这个使用我自己的,可以根据自己的情况来写,

package com.example.source.controller;


import com.baomidou.dynamic.datasource.annotation.DS;
import com.example.source.entity.YxUser;
import com.example.source.mapper.YxUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * <p>
 * 用户表 前端控制器
 * </p>
 *
 * @author astupidcoder
 * @since 2021-04-20
 */
@RestController
@RequestMapping("/yxUser")
public class YxUserController {


    @Autowired
    private YxUserMapper yxUserMapper;

    @GetMapping("")
    public String get(){
        List<YxUser> yxUsers = yxUserMapper.selectList(null);
        return yxUsers.toString();
    }
}

接下来比较重要的
@DS(“yuan”) 注解 意思是,使用那个数据源,我们默认所有 mapper层都去走 yuan这个数据源,当这个yuan数据源被我们动态删除 后 代码就会去 找 我们yml配置的默认数据源,这样就能 来回切换数据源了。。其他的就是删除数据源,和添加数据源 的操作

package com.example.source.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.example.source.entity.YxUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author astupidcoder
 * @since 2021-04-20
 */
@DS("yuan")
public interface YxUserMapper extends BaseMapper<YxUser> {

}

大功告成 之后去测试
在这里插入图片描述
创建多个数据库测试
启动 。。查看数据源 现在是一个默认数据源
在这里插入图片描述
看看数据
在这里插入图片描述
添加一个数据源名称是yuan的
在这里插入图片描述

在请求数据
在这里插入图片描述
我们如果想切换其他数据源,可以删除 当前 yuan数据源, 在创建一个yuan数据源
就可以完成数据源的切换。

Spring Boot和MyBatis-Plus是现代Java应用开发中的两个流行框架组合,它们一起简化了企业级应用程序的快速搭建。以下是一个基本的Spring Boot + MyBatis-Plus的整体开发流程: 1. **项目初始化**: - 创建一个新的Spring Boot项目(使用Maven或Gradle构建工具)。 - 添加Spring Boot Web、Spring Data JPA和MyBatis-Plus的依赖。 2. **数据库配置**: - 配置数据源(如HikariCP, Druid, 或者Spring Boot内置的DataSource)。 - 定义数据库连接池和JDBC驱动。 3. **实体类映射**: - 创建Java实体类(Entity),它们将对应数据库结构。 - 使用MyBatis-Plus的Model Generator工具自动生成基础CRUD操作的代码。 4. **Mapper接口生成**: - 通过MyBatis-Plus的全局配置文件(GlobalConfig),指定Mapper接口生成的位置。 5. **Service层编写**: - 实现业务逻辑的服务类(Service),这些类通常会依赖于MyBatis-Plus的Mapper接口进行数据库操作。 6. **Repository接口和实现**: - 如果需要,可以创建Repository接口,继承自MyBatis-Plus的BaseMapper,进一步定制化查询。 7. **Controller层处理**: - 创建RESTful API控制器(Controller),调用Service层的方法,并返回JSON响应给客户端。 8. **配置数据初始化**: - 编写Spring Boot的启动类(Application)中的main方法,可能包含一些数据初始化操作。 9. **测试**: - 使用单元测试(JUnit, TestNG等)确保各个组件正常工作,如Service和Mapper接口的测试。 10. **部署**: - 部署项目到生产环境,如Tomcat, Jetty, 或者云服务器上的Web容器。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值