Mysql 苞米豆 多数据源 读写分离(小项目可用)

news2024/12/24 8:46:43

目录

0 课程视频

1 配置

1.1 加依赖

1.2 yml 配置文件 -> druid配置后报错 搞不定

2 代码

2.1 实体类

2.2 mapper -> 调用操作数据库方法 操作数据库

2.3  service -> 指定数据源 -> 用Mapper 接口 -> 操作数据库

2.4 controller -> 用户使用接口 -> 用service 方法 

3 总结

3.1 项目小 可用此方案

3.2 项目大 建议使用 sharding-jdbc

3.3 需要将原生的Druid的配置 隔离掉

3.4 事务的开启需在多数据的切换后

3.5 参考


0 课程视频

https://www.bilibili.com/video/BV1JL41117Lb/?spm_id_from=333.788&vd_source=ff8b7f852278821525f11666b36f180aicon-default.png?t=N3I4https://www.bilibili.com/video/BV1JL41117Lb/?spm_id_from=333.788&vd_source=ff8b7f852278821525f11666b36f180a

1 配置

1.1 加依赖

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

        <!-- 苞米豆 多数据源 读写分离-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>2.5.4</version>
        </dependency>

        <!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10 </version>
        </dependency>

 <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

1.2 yml 配置文件 -> druid配置后报错 搞不定


server:
  port: 8090

spring:
  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          #type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://8.219.87.87:3306/test001?useSSL=false&useUnicode=true&characterEncoding=utf-8
          username: 
          password: 

        slave_1: # slave 是组名,可以自定义; 1 是从库名 ,可以多个从库在slave组中, 自动轮询 负载均衡
          #type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://8.219.87.87:3307/test001?useSSL=false&useUnicode=true&characterEncoding=utf-8
          username: 
          password: 


  mail:
    protocol: smtp # 邮件协议
    host: smtp.163.com # qq邮箱 smtp 服务器地址
    port: 25
    username: myz50w@163.com # 发件人邮箱地址
    password: HNJUACYDXLXKBFTJ #csludyslehgqbcha # 授权码
    default-encoding: utf-8 # 编码字符集
    properties:
      mail:
        debug: true # 开启 debug 模式以后会完整打印邮件发送过程的日志

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启驼峰映射

2 代码

2.1 实体类

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("user") //连接数据库表名
public class User implements Serializable {
    @TableId(value = "id", type = IdType.AUTO) // 解决 id 自动生成太大
    private Integer id; // 主键
    private String email; // 邮箱
    private String password; // 密码,使用 md5 + 盐 加密
    private String salt; // 盐
    private String confirmCode; // 确认码
    private LocalDateTime activationTime; // 激活失效时间
    private Byte isValid; // 是否可用

}

2.2 mapper -> 调用操作数据库方法 操作数据库

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.test_reg.entity.User;
import org.apache.ibatis.annotations.Mapper;


@Mapper 
public interface UserMapper extends BaseMapper<User> {
 }

2.3  service -> 指定数据源 -> 用Mapper 接口 -> 操作数据库

    @DS("slave")
    public List getUser(){
        
     userMapper.select(参数)
    }

    @DS("master")
    public Map<String, Object> Register(User user) { 

        userMapper.insert(user);
    
    }

2.4 controller -> 用户使用接口 -> 用service 方法 

@GetMapping("getUser")
    public List getUser() {
        return userService.getUser();
    }

@PostMapping("register")
    public Map<String, Object> Register(@RequestBody User user) {
        return userService.Register(user);
    }

3 总结

3.1 项目小 可用此方案

3.2 项目大 建议使用 sharding-jdbc

3.3 需要将原生的Druid的配置 隔离掉

3.4 事务的开启需在多数据的切换后

3.5 参考

苞米豆多数据源管理_baomidou 使用druid_菜菜阿菜的博客-CSDN博客网上关于动态数据源的切换的文档有很多,核心只有两种。1是构建多套环境,2是基于spring原生的AbstractRoutingDataSource切换。如果你的数据源较少,场景不复杂,选择以上任意一种都可以。如果你需要更多特性,请试着尝试本数据源。数据源分组,适用于多种场景,常见的场景如下。纯粹多库,各个库甚至可以是不同的数据库。读写分离,一主多从,多主多从。混合模式,既有主从也有单库。自动集成Druid数据源,方便监控管理。自动集成Mybatis-Plus。自定义数据源来源。(如从数据库的https://blog.csdn.net/weixin_42849706/article/details/108868208

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当~python批量获取某电商:商品数据并作可视化

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境: 首先我们先来安装一下写代码的软件&#xff08;对没安装的小白说&#xff09; Python 3.8 / 编译器 Pycharm 2021.2版本 / 编辑器 专业版是付费的 <文章下方名片可获取魔法永久用~> 社区版是免费的 …

利用Python如何实现数据驱动的接口自动化测试

目录 前言 1、需求 2、方案 3、实现 总结 前言 大家在接口测试的过程中&#xff0c;很多时候会用到对CSV的读取操作&#xff0c;本文主要说明Python3对CSV的写入和读取。下面话不多说了&#xff0c;来一起看看详细的介绍吧。 1、需求 某API&#xff0c;GET方法&#xff…

HbuilderX打包AndroidAPP使用教程

HBuilder是DCloud&#xff08;数字天堂&#xff09;推出的一款支持HTML5的Web开发IDE。HBuilder的编写用到了Java、C、Web和Ruby。HBuilder本身主体是由Java编写。它基于Eclipse&#xff0c;所以顺其自然地兼容了Eclipse的插件。 HbuildX打包android的apk安装包时需要新建项目 …

Insix:面向真实的生成数据增强,用于Nuclei实例分割

文章目录 InsMix: Towards Realistic Generative Data Augmentation for Nuclei Instance Segmentation摘要本文方法数据增强方法具有形态学约束的前景增强提高鲁棒性的背景扰动 实验结果 InsMix: Towards Realistic Generative Data Augmentation for Nuclei Instance Segment…

Go语言开发小技巧易错点100例(七)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

云原生Istio基本介绍

目录 1 什么是Istio2 Istio特征2.1 连接2.2 安全2.3 策略2.4 观察 3 Istio与服务治理3.1服务治理的三种形态 4 Istio与Kubernetes4.1 Kubernetes介绍4.2 Istio是Kubernetes的好帮手4.3 Kubernetes是Istio的好基座 5 Istio与服务网格5.1 时代选择服务网格5.2 服务网格选择Istio …

【Python入门】Pycharm的使用指南

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…

五、C++内存管理机制 —— 分配器allocator(侯捷)

侯捷 C八部曲笔记汇总 - - - 持续更新 ! ! ! 一、C 面向对象高级开发 1、C面向对象高级编程(上) 2、C面向对象高级编程(下) 二、STL 标准库和泛型编程 1、分配器、序列式容器 2、关联式容器 3、迭代器、 算法、仿函数 4、适配器、补充 三、C 设计模式 四、C 新标准 五、C 内存管…

剑指 Offer 12. 矩阵中的路径 / LeetCode 79. 单词搜索(深度优先搜索)

题目&#xff1a; 链接&#xff1a;剑指 Offer 12. 矩阵中的路径&#xff1b;LeetCode 79. 单词搜索 难度&#xff1a;中等 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 fals…

计算机组成原理笔记---整理自用

第二章 - 运算器 2.1.3 无符号整数 概述 机器字长限制了一次能处理数据位数的上限 无符号减法⭐️ 总结 2.1.4 带符号整数 原码 真值0有两种形式 0和-0n 1位机器字长原码的表示范围缺点&#xff1a;无法进行有符号加法运算 缺点 数值转换⭐️ 补码运算 加减法 – 符…

2023 年 五一杯 D 题大奖预定第一问求解过程与结果

文章目录 第一题问题分析PageRank 算法&#xff08;可跳过&#xff09;PageRank 算法修正权重系数 结果各城市链出与链入链出 权重链入 权重 PageRank 算法结果代码 第一题 问题分析 从收货量、发货量、快递数量增长/减少趋势、相关性等多角度考虑&#xff0c;建立数学模型&…

[MAUI]模仿iOS多任务切换卡片滑动的交互实现

文章目录 原理创建布局创建分布函数创建动效创建绑定数据细节调整首张卡片的处理为卡片添加裁剪跳转到最后一张卡片 项目地址 看了上一篇博文的评论&#xff0c;大家对MAUI还是比较感兴趣的&#xff0c;非常感谢大家的关注&#xff0c;这个专栏我争取周更&#x1f609;。 App之…

git把我本地文件传到我的指定的仓库

在使用Git将本地文件推送到指定仓库之前&#xff0c;请确保已经安装了Git并进行了基本配置。接下来&#xff0c;遵循以下步骤将本地文件推送到远程仓库&#xff1a; 兄弟先赏析悦目一下&#xff0c;摸个鱼 首先&#xff0c;在本地文件夹中打开命令行界面&#xff08;在Windows上…

关于I帧/IDR、B帧、P帧、SPS、PPS

在h264编解码中&#xff0c;常常有I帧/IDR/B帧/P帧/IDR/NALU/GOP/&#xff0c;但往往没有关注细节。或者我们本身在实际应用中与使用过很多次&#xff0c;但对相关的技术名词不清楚。 在H264协议里定义了三种帧&#xff0c;完整编码的帧叫I帧&#xff0c;参考之前的I帧生成的只…

【C语言】 知识点汇总--基础知识点梳理(超全超详细)

目录 一、从源代码到exe 二、基本数据类型 三、字符在屏幕上的显示原理 四、溢出现象 五、类型转换规律 六、短路问题 七、指针变量类型的作用 八、指针类型的扩展——多级指针 九、指针类型的扩展——指针数组 十、指针类型的扩展——数组指针 十一、一维数组-名-特…

Doris(24):Doris的函数—聚合函数

1 APPROX_COUNT_DISTINCT(expr) 返回类似于 COUNT(DISTINCT col) 结果的近似值聚合函数。 它比 COUNT 和 DISTINCT 组合的速度更快,并使用固定大小的内存,因此对于高基数的列可以使用更少的内存。 select city,approx_count_distinct(user_id) from site_visit group by c…

Go语言-数据结构与算法

20.4 稀疏 sparsearray 数组 20.4.1 先看一个实际的需求  编写的五子棋程序中&#xff0c;有存盘退出和续上盘的功能 稀疏数组的处理方法是 : 1) 记录数组一共有几行几列&#xff0c;有多少个不同的值 2) 思想&#xff1a;把具有不同值的元素的行列及值记录在一个…

前端三剑客之HTML】

⭐个人主页&#xff1a;书生♡博客主页&#x1f64b;‍♂ &#x1f351;博客领域&#xff1a;java编程,前端&#xff0c;算法&#xff0c;强训题目 写作风格&#xff1a;干货,干货,还是tmd的干货 支持博主&#xff1a;点赞、收藏⭐、留言&#x1f4ac; 目录 1.前端1.1什么是前端…

MySQL学习笔记第七天

第07章单行函数 2. 数值函数 2.4 指数函数、对数函数 函数用法POW(x,y)&#xff0c;POWER(X,Y)返回x的y次方EXP(X)返回e的x次方&#xff0c;其中e是一个常数&#xff0c;2.718281828459045LN(X)&#xff0c;LOG(X)返回以e为底的X的对数&#xff0c;当x<0时&#xff0c;返…

基于FPGA+JESD204B 时钟双通道 6.4GSPS 高速数据采集模块设计(一)总体方案

本章将根据高速数据采集指标要求&#xff0c;分析并确定高速数据采集模块的设计方 案&#xff0c;由此分析数据存储需求及存储速度需求给出高速大容量数据存储方案&#xff0c;完成 双通道高速数据采集模块总体设计方案&#xff0c;并综合采集、存储方案及 AXIe 接口需求 …