中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot怎么實現讀寫分離

發布時間:2022-05-16 17:09:29 來源:億速云 閱讀:437 作者:iii 欄目:開發技術

這篇文章主要講解了“SpringBoot怎么實現讀寫分離”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“SpringBoot怎么實現讀寫分離”吧!

前言

根據公司業務需求,項目需要讀寫分離,所以記錄下讀寫分離的過程。

分為兩個部分:

1.項目的讀寫分離。

2.mysql數據庫的主從復制。

本篇使用的依賴包為sharding-jdbc-spring-boot-starter,也有考慮直接用dynamic-datasource-spring-boot-starter,但是需要在程序中顯式的聲明所指定的數據源,并且在從庫>=2 的時候需要自己寫算法進行讀庫的選擇。而sharding-jdbc支持讀庫的負載均衡策略,sharding會根據語句的關鍵字來決定是讀操作還是寫操作

Insert選擇主庫

SpringBoot怎么實現讀寫分離

Select選擇從庫2(由于設置的了輪詢,所以下一次就是從庫1)

SpringBoot怎么實現讀寫分離

1.項目引入依賴

	<dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.0.0-RC1</version>
        </dependency>

2.yml配置

共有三臺機器,

主庫一臺(127.0.0.1)

從庫兩臺(192.168.1.5 192.168.1.6)

spring:
  shardingsphere:
    props:
      sql:
        show: false
    sharding:
      default-data-source-name: master
    masterslave:
      name: ms
      master-data-source-name: master
      slave-data-source-names: slave1,slave2
      #配置slave節點的負載均衡均衡策略,采用輪詢機制
      load-balance-algorithm-type: round_robin
    datasource:
      names: master,slave1,slave2
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/life_account_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: root
        maxPoolSize: 100
        minPoolSize: 5
      slave1:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.1.5:3306/life_account_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
        username: test
        password: Houxuyang123!@#
        maxPoolSize: 100
        minPoolSize: 5
      slave2:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.1.6:3306/life_account_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
        username: test
        password: Houxuyang123!@#
        maxPoolSize: 100
        minPoolSize: 5

3.啟動

SpringBoot怎么實現讀寫分離

4.測試

第一次讀數據(從庫1)

SpringBoot怎么實現讀寫分離

SpringBoot怎么實現讀寫分離

SpringBoot怎么實現讀寫分離

第二次讀數據(從庫2)

SpringBoot怎么實現讀寫分離

SpringBoot怎么實現讀寫分離

SpringBoot怎么實現讀寫分離

主庫寫

SpringBoot怎么實現讀寫分離

SpringBoot怎么實現讀寫分離

SpringBoot怎么實現讀寫分離

項目讀寫分離基本實現。

5.中間所遇到的問題

mysql查詢問題

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'life_account_db.acc_order.serial_no' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因:

沒有遵循原則的sql會被認為是不合法的sql

1.order by后面的列必須是在select后面存在的

2.select、having或order by后面存在的非聚合列必須全部在group by中存在

解決方法:

修改配置文件:vim /etc/my.cnf

添加:sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

重啟mysql:systemctl restart mysqld

SpringBoot怎么實現讀寫分離

:wq

感謝各位的閱讀,以上就是“SpringBoot怎么實現讀寫分離”的內容了,經過本文的學習后,相信大家對SpringBoot怎么實現讀寫分離這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜阳市| 肥城市| 曲阳县| 建水县| 巩义市| 滨海县| 太仓市| 石楼县| 米脂县| 静乐县| 霸州市| 定州市| 色达县| 偃师市| 陇南市| 同江市| 天柱县| 额尔古纳市| 渝北区| 拜城县| 建平县| 新乡市| 莱阳市| 丰宁| 通化县| 全南县| 柳州市| 绥阳县| 驻马店市| 云安县| 公主岭市| 乐东| 灵川县| 漯河市| 洪泽县| 望奎县| 汾阳市| 宁远县| 保定市| 庆云县| 新民市|