欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot項(xiàng)目中使用Sharding-JDBC實(shí)現(xiàn)讀寫分離的詳細(xì)步驟

 更新時(shí)間:2024年08月22日 11:04:34   作者:戰(zhàn)族狼魂  
Sharding-JDBC是一個(gè)分布式數(shù)據(jù)庫(kù)中間件,它不僅支持?jǐn)?shù)據(jù)分片,還可以輕松實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀寫分離,本文介紹如何在Spring Boot項(xiàng)目中集成Sharding-JDBC并實(shí)現(xiàn)讀寫分離的詳細(xì)步驟,需要的朋友可以參考下

1. 引入依賴

在Spring Boot項(xiàng)目的pom.xml文件中引入Sharding-JDBC的依賴:

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>5.1.2</version> <!-- 選擇合適的版本 -->
</dependency>

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

Sharding-JDBC支持通過YAML、Properties、或者Spring Boot的application.yml/application.properties文件來(lái)配置數(shù)據(jù)源。這里以application.yml為例。

假設(shè)你有一個(gè)主庫(kù)和兩個(gè)從庫(kù),master是主庫(kù),slave0和slave1是從庫(kù)。

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://localhost:3306/master_db?serverTimezone=UTC&useSSL=false
        username: root
        password: root
      slave0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/slave0_db?serverTimezone=UTC&useSSL=false
        username: root
        password: root
      slave1:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/slave1_db?serverTimezone=UTC&useSSL=false
        username: root
        password: root
 
    rules:
      replica-query:
        data-sources:
          pr_ds:
            primary-data-source-name: master
            replica-data-source-names:
              - slave0
              - slave1
            load-balancer-name: round_robin  # 負(fù)載均衡策略
        load-balancers:
          round_robin:
            type: ROUND_ROBIN  # 輪詢負(fù)載均衡策略

3. 配置Sharding-JDBC相關(guān)參數(shù)

可以通過配置spring.shardingsphere前綴下的參數(shù)來(lái)定制Sharding-JDBC的行為。常用的配置包括:

  • primary-data-source-name: 指定主數(shù)據(jù)庫(kù)
  • replica-data-source-names: 指定從數(shù)據(jù)庫(kù)
  • load-balancer-name: 選擇負(fù)載均衡策略

4. 配置Spring Boot的事務(wù)管理

為了保證在讀寫分離的情況下事務(wù)的一致性,需要配置Spring的事務(wù)管理器。Sharding-JDBC內(nèi)部已經(jīng)封裝好了事務(wù)管理,通常情況下不需要額外配置。

如果有特殊需求,可以自定義事務(wù)管理器。例如:

@Configuration
public class TransactionConfig {
 
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

5. 使用Sharding-JDBC進(jìn)行數(shù)據(jù)庫(kù)操作

使用Sharding-JDBC之后,開發(fā)者不需要做特別的操作,Sharding-JDBC會(huì)自動(dòng)根據(jù)SQL的類型(查詢、插入、更新、刪除)選擇合適的數(shù)據(jù)庫(kù)進(jìn)行操作。例如:

@Service
public class UserService {
 
    @Autowired
    private UserMapper userMapper;
 
    @Transactional
    public void createUser(User user) {
        userMapper.insert(user);  // 插入操作會(huì)走主庫(kù)
    }
 
    public User getUserById(Long id) {
        return userMapper.selectById(id);  // 查詢操作會(huì)走從庫(kù)
    }
}

在上述代碼中,createUser方法中的插入操作會(huì)自動(dòng)路由到主庫(kù),而getUserById方法中的查詢操作會(huì)根據(jù)配置路由到從庫(kù)。

6. 測(cè)試配置

完成上述配置后,你可以編寫一些測(cè)試代碼來(lái)驗(yàn)證讀寫分離是否生效。通過在應(yīng)用中插入數(shù)據(jù)然后查詢,可以驗(yàn)證數(shù)據(jù)是否正確地寫入主庫(kù)并從從庫(kù)中讀取。

7. 常見問題

  • 事務(wù)問題:在分布式環(huán)境中,事務(wù)的實(shí)現(xiàn)可能會(huì)比較復(fù)雜。Sharding-JDBC支持本地事務(wù),分布式事務(wù)需要額外的配置或使用其他事務(wù)協(xié)調(diào)器(如Seata)。
  • 性能問題:讀寫分離可以有效提高讀操作的性能,但要注意主從同步的延遲問題。

到此這篇關(guān)于SpringBoot項(xiàng)目中使用Sharding-JDBC實(shí)現(xiàn)讀寫分離的詳細(xì)步驟的文章就介紹到這了,更多相關(guān)SpringBoot Sharding-JDBC讀寫分離內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring框架下websocket的搭建

    spring框架下websocket的搭建

    本篇文章主要介紹了spring框架下websocket的搭建,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-03-03
  • IDEA中配置Java反編譯工具javap -c的使用

    IDEA中配置Java反編譯工具javap -c的使用

    本文主要介紹了IDEA中配置Java反編譯工具javap -c的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • java項(xiàng)目中classpath指向哪里

    java項(xiàng)目中classpath指向哪里

    這篇文章介紹了java項(xiàng)目中classpath指向哪里及工作原理,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Java中volatile防止指令重排

    Java中volatile防止指令重排

    volatile可以防止指令重排,在多線程環(huán)境下有時(shí)候我們需要使用volatile來(lái)防止指令重排,來(lái)保證代碼運(yùn)行后數(shù)據(jù)的準(zhǔn)確性,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 通過Java查看程序資源占用情況

    通過Java查看程序資源占用情況

    這篇文章主要介紹了通過Java查看程序資源占用情況,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java后臺(tái)開發(fā)之表單提交之前驗(yàn)證

    Java后臺(tái)開發(fā)之表單提交之前驗(yàn)證

    這篇文章主要介紹了Java后臺(tái)開發(fā)之表單提交之前驗(yàn)證的實(shí)現(xiàn)代碼,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-02-02
  • 基于ArrayList常用方法的源碼全面解析

    基于ArrayList常用方法的源碼全面解析

    下面小編就為大家?guī)?lái)一篇基于ArrayList常用方法的源碼全面解析。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-06-06
  • Jenkins自動(dòng)化部署SpringBoot項(xiàng)目的實(shí)現(xiàn)

    Jenkins自動(dòng)化部署SpringBoot項(xiàng)目的實(shí)現(xiàn)

    本文主要介紹了Jenkins自動(dòng)化部署SpringBoot項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2023-01-01
  • SpringBoot+Spring Security基于內(nèi)存用戶認(rèn)證的實(shí)現(xiàn)

    SpringBoot+Spring Security基于內(nèi)存用戶認(rèn)證的實(shí)現(xiàn)

    本文介紹了SpringBoot+Spring Security基于內(nèi)存用戶認(rèn)證的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Java使用Collections.sort()排序的示例詳解

    Java使用Collections.sort()排序的示例詳解

    這篇文章主要介紹了Java使用Collections.sort()排序的示例詳解,Collections.sort(list, new PriceComparator());的第二個(gè)參數(shù)返回一個(gè)int型的值,就相當(dāng)于一個(gè)標(biāo)志,告訴sort方法按什么順序來(lái)對(duì)list進(jìn)行排序。對(duì)此感興趣的可以了解一下
    2020-07-07

最新評(píng)論