SpringBoot+Mysql实现读写分离主从复制(一)

一:mysql的读写分离+一主二仆
技术点:springboot+mysql+dynamic-datasource-spring-boot-starter(多数据源)
理解:先说下单台服务器的缺点
1.服务宕机后没得玩了,
2.读写在一个库造成数据库压力大
3.因操作不当造成了单表被锁,影响查询

读写分离优点:
需要应用2台服务
1.缓解服务器访问压力
2.用数据库查询会多,将一个库用作查询,一个库用作 增,删,改

一主二仆
需要应用3台服务 1.极大缓解了服务器的访问压力,2.需要注意两台从库访问是采用轮询机制,

1.业务场景
客户给了3台MySQL数据库服务器,一主二从,程序需要集成读写分离,充分提升数据处理能力
数据层使用了MyBatis-Plus,它有一个多数据源的中间件 dynamic-datasource-spring-boot-starter;

步骤一:pom.xml核心依赖

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

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<!--mybatis-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.1.1</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.20</version>
</dependency>
<!-- 多数据源配置 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

        <!-- mybatis generator 自动生成代码插件 -->
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.5</version>
            <configuration>
                <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
                <overwrite>true</overwrite>
                <verbose>true</verbose>
            </configuration>
        </plugin>
    </plugins>
</build>

步骤二: 多数据源约定在yml中配置, 配置好主库,从库连接地址

1. 本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。
2. 配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。
3. 切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。
4.默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。
5. 方法上的注解优先于类上注解。
6. 强烈建议只在service的类和方法上添加注解,不建议在mapper上添加注解。
#数据源
  datasource:
      druid:
        stat-view-servlet:
          enabled: true
      dynamic:
        primary: 'master'
        p6spy: false
        # 配置Druid全局默认值
        druid:
          initial-size: 5
          max-active: 8
          min-idle: 3
          max-wait: 1000
          validation-query: 'select 1'
        datasource:
          master:
            username: root
            password: "******"
            url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
            driver-class-name: com.mysql.cj.jdbc.Driver
          slave_1:
            username: root
            password: "******"
            url: jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
            driver-class-name: com.mysql.cj.jdbc.Driver
          slave_2:
            username: root
            password: "******"
            url: jdbc:mysql://localhost:3306/test3?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
            driver-class-name: com.mysql.cj.jdbc.Driver
  resources:
    static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${file.uploadFolder}

步骤三:在实现层对方法进行 @DS(“slave”) 指向 , ds可以指向组名,也可以是具体名称
到此已配置完成可以测试了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值