亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Boot項(xiàng)目中結(jié)合MyBatis實(shí)現(xiàn)MySQL的自動(dòng)主從切換功能

 更新時(shí)間:2025年04月10日 11:08:30   作者:山高自有客行路  
這篇文章主要介紹了Spring Boot項(xiàng)目中結(jié)合MyBatis實(shí)現(xiàn)MySQL的自動(dòng)主從切換功能,本文分步驟給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

原理解析

1. MySQL主從復(fù)制(Master-Slave Replication)

  • 工作原理:MySQL主從復(fù)制通過(guò)二進(jìn)制日志(binary log)來(lái)同步數(shù)據(jù)。主服務(wù)器記錄所有更改操作到二進(jìn)制日志中,從服務(wù)器讀取這些日志并執(zhí)行相應(yīng)的SQL語(yǔ)句來(lái)保持與主服務(wù)器的數(shù)據(jù)一致。
  • 延遲問(wèn)題:由于網(wǎng)絡(luò)傳輸和處理時(shí)間,從庫(kù)可能會(huì)有短暫的數(shù)據(jù)滯后,這對(duì)于需要實(shí)時(shí)一致性的場(chǎng)景是一個(gè)挑戰(zhàn)。

2. 讀寫(xiě)分離

  • 目的:提高系統(tǒng)性能和可用性。通過(guò)將讀請(qǐng)求分配給從庫(kù),寫(xiě)請(qǐng)求發(fā)送給主庫(kù),可以減少主庫(kù)的壓力,提升系統(tǒng)的整體性能。
  • 實(shí)現(xiàn)方式:可以通過(guò)數(shù)據(jù)庫(kù)中間件或框架層面的配置來(lái)實(shí)現(xiàn)。在這個(gè)例子中,我們使用Apache ShardingSphere來(lái)實(shí)現(xiàn)讀寫(xiě)分離。

3. 自動(dòng)故障轉(zhuǎn)移

  • 原理:當(dāng)檢測(cè)到主庫(kù)不可用時(shí),系統(tǒng)會(huì)自動(dòng)選擇一個(gè)從庫(kù)作為新的主庫(kù),并重新調(diào)整讀寫(xiě)分配。這通常涉及到心跳檢測(cè)、狀態(tài)監(jiān)控等機(jī)制。
  • 工具支持:除了ShardingSphere外,還可以使用MHA(MySQL Master High Availability)或其他高可用解決方案。

實(shí)現(xiàn)步驟詳解

1. 引入依賴

pom.xml中添加必要的依賴,包括Spring Boot Starter、MyBatis Starter以及ShardingSphere:

深色版本

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!-- MyBatis Starter -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>
    <!-- ShardingSphere for read-write splitting -->
    <dependency>
        <groupId>org.apache.shardingsphere</groupId>
        <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
        <version>4.1.1</version>
    </dependency>
</dependencies>

2. 配置數(shù)據(jù)源

編輯application.yml文件以配置多個(gè)數(shù)據(jù)源,并設(shè)置ShardingSphere規(guī)則以實(shí)現(xiàn)讀寫(xiě)分離:

深色版本

spring:
  shardingsphere:
    datasource:
      names: master,slave0,slave1
      master:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://master_host:3306/your_db?useSSL=false&serverTimezone=UTC
        username: your_username
        password: your_password
      slave0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://slave0_host:3306/your_db?useSSL=false&serverTimezone=UTC
        username: your_username
        password: your_password
      slave1:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://slave1_host:3306/your_db?useSSL=false&serverTimezone=UTC
        username: your_username
        password: your_password
    masterslave:
      load-balance-algorithm-type: round_robin # 負(fù)載均衡策略
      name: ms_ds # 數(shù)據(jù)源名稱
      master-data-source-name: master # 主庫(kù)數(shù)據(jù)源名稱
      slave-data-source-names: slave0,slave1 # 從庫(kù)數(shù)據(jù)源名稱列表
    props:
      sql:
        show: true # 是否顯示SQL語(yǔ)句

3. 配置MyBatis

創(chuàng)建MyBatis Mapper接口,并使用注解或XML配置SQL語(yǔ)句。這里以注解方式為例:

深色版本

package com.example.demo.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
@Mapper
public interface UserMapper {
    /**
     * 查詢所有用戶信息.
     * 注意:對(duì)于查詢操作,ShardingSphere會(huì)選擇其中一個(gè)從庫(kù)來(lái)執(zhí)行查詢。
     *
     * @return 用戶信息列表
     */
    @Select("SELECT * FROM users")
    List<Map<String, Object>> findAllUsers();
    /**
     * 更新用戶信息.
     * 注意:寫(xiě)操作只會(huì)針對(duì)主庫(kù)執(zhí)行。
     *
     * @param id 用戶ID
     * @param newName 新用戶名
     */
    void updateUserById(@Param("id") Long id, @Param("newName") String newName);
}

確保你的Spring Boot應(yīng)用掃描到Mapper接口??梢栽谥黝惿咸砑?code>@MapperScan注解:

深色版本

package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

4. 使用Mapper進(jìn)行數(shù)據(jù)庫(kù)操作

現(xiàn)在你可以在Service層中注入并使用Mapper接口來(lái)進(jìn)行數(shù)據(jù)庫(kù)操作:

深色版本

package com.example.demo.service;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    /**
     * 獲取所有用戶信息.
     *
     * @return 用戶信息列表
     */
    public List<Map<String, Object>> getAllUsers() {
        return userMapper.findAllUsers();
    }
    /**
     * 更新用戶名稱.
     *
     * @param id       用戶ID
     * @param newName 新用戶名
     */
    public void updateUserName(Long id, String newName) {
        userMapper.updateUserById(id, newName);
    }
}

注意事項(xiàng)及最佳實(shí)踐

  • 事務(wù)管理:確保所有寫(xiě)操作都在同一個(gè)事務(wù)中執(zhí)行,并且只對(duì)主庫(kù)進(jìn)行寫(xiě)操作??梢允褂?code>@Transactional注解來(lái)管理事務(wù)。
  • 數(shù)據(jù)一致性:考慮到主從復(fù)制延遲的問(wèn)題,在某些場(chǎng)景下(如剛完成寫(xiě)操作后立即讀?。赡苄枰苯硬樵冎鲙?kù)以保證數(shù)據(jù)一致性。
  • 健康檢查:建議定期監(jiān)控主從狀態(tài),確保從庫(kù)同步正常以及主庫(kù)可訪問(wèn)??梢酝ㄟ^(guò)定時(shí)任務(wù)或者外部工具來(lái)實(shí)現(xiàn)。
  • 性能優(yōu)化:根據(jù)實(shí)際業(yè)務(wù)需求調(diào)整負(fù)載均衡策略,例如采用權(quán)重輪詢或其他高級(jí)算法來(lái)優(yōu)化查詢效率。

到此這篇關(guān)于Spring Boot項(xiàng)目中結(jié)合MyBatis實(shí)現(xiàn)MySQL的自動(dòng)主從切換的文章就介紹到這了,更多相關(guān)Spring Boot MyBatis自動(dòng)主從切換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java正則實(shí)現(xiàn)各種日期格式化

    java正則實(shí)現(xiàn)各種日期格式化

    本文給大家分享的是使用java結(jié)合正則表達(dá)式來(lái)實(shí)現(xiàn)各種日期的格式化功能,代碼非常的簡(jiǎn)單,有需要的小伙伴可以參考下。
    2015-05-05
  • Java數(shù)據(jù)結(jié)構(gòu)之復(fù)雜度篇

    Java數(shù)據(jù)結(jié)構(gòu)之復(fù)雜度篇

    算法復(fù)雜度分為時(shí)間復(fù)雜度和空間復(fù)雜度。其作用:?時(shí)間復(fù)雜度是度量算法執(zhí)行的時(shí)間長(zhǎng)短;而空間復(fù)雜度是度量算法所需存儲(chǔ)空間的大小
    2022-01-01
  • 不看后悔!揭秘游戲服務(wù)器開(kāi)發(fā)

    不看后悔!揭秘游戲服務(wù)器開(kāi)發(fā)

    剛開(kāi)始時(shí)以為做游戲服務(wù)器和做web差不多,但是經(jīng)過(guò)一段時(shí)間之后,才發(fā)現(xiàn)代碼太多,太亂了,這里我把一些游戲開(kāi)發(fā)方面的東西整理一下,希望能對(duì)那些想做游戲服務(wù)器開(kāi)發(fā)的朋友有所幫助
    2021-06-06
  • Java導(dǎo)出網(wǎng)頁(yè)表格Excel過(guò)程詳解

    Java導(dǎo)出網(wǎng)頁(yè)表格Excel過(guò)程詳解

    這篇文章主要介紹了Java導(dǎo)出網(wǎng)頁(yè)表格Excel過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot?將配置文件掛到?jar?包外面的操作方法

    SpringBoot?將配置文件掛到?jar?包外面的操作方法

    在 SpringBoot 中,可以將配置文件放在 jar 包外面,這樣可以方便地修改配置而不需要重新打包和部署,這篇文章主要介紹了SpringBoot?如何將配置文件掛到?jar?包外面,需要的朋友可以參考下
    2023-03-03
  • Java多線程之scheduledThreadPool的方法解析

    Java多線程之scheduledThreadPool的方法解析

    這篇文章主要介紹了Java多線程之scheduledThreadPool的方法解析,queue是DelayedWorkQueue,但通過(guò)后面的分析可以知道,最大線程數(shù)是不起作用的,最多會(huì)起核心線程數(shù)的數(shù)量,需要的朋友可以參考下
    2023-12-12
  • 基于HashMap遍歷和使用方法(詳解)

    基于HashMap遍歷和使用方法(詳解)

    下面小編就為大家?guī)?lái)一篇基于HashMap遍歷和使用方法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 基于Spring AMQP實(shí)現(xiàn)消息隊(duì)列的示例代碼

    基于Spring AMQP實(shí)現(xiàn)消息隊(duì)列的示例代碼

    Spring AMQP作為Spring框架的一部分,是一套用于支持高級(jí)消息隊(duì)列協(xié)議(AMQP)的工具,AMQP是一種強(qiáng)大的消息協(xié)議,旨在支持可靠的消息傳遞,本文給大家介紹了如何基于Spring AMQP實(shí)現(xiàn)消息隊(duì)列,需要的朋友可以參考下
    2024-03-03
  • 微服務(wù)中使用Maven BOM來(lái)管理你的版本依賴詳解

    微服務(wù)中使用Maven BOM來(lái)管理你的版本依賴詳解

    這篇文章主要介紹了微服務(wù)中使用Maven BOM來(lái)管理你的版本依賴,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 在Java中將jsonObject轉(zhuǎn)換成對(duì)象的實(shí)現(xiàn)方法

    在Java中將jsonObject轉(zhuǎn)換成對(duì)象的實(shí)現(xiàn)方法

    在現(xiàn)代的Web開(kāi)發(fā)中,JSON作為一種輕量級(jí)的數(shù)據(jù)交換格式,因其易讀性和易于解析的特點(diǎn)而被廣泛使用,本文將介紹如何在Java中將??jsonObject??轉(zhuǎn)換成Java對(duì)象,主要通過(guò)使用Gson庫(kù)來(lái)實(shí)現(xiàn)這一功能,需要的朋友可以參考下
    2025-04-04

最新評(píng)論