springcloud:動的データソースコンポーネントを使用して、複数のデータソース、1つのマスターと複数のスレーブを構成し、読み取りと書き込みの分離を行います(10)

0序文

マイクロサービスアーキテクチャでは、サブデータベースサブテーブルが一般的な操作です。複数のデータソースの場合、どうすればコードを柔軟に切り替えることができるかが問題になります。今日は、dynamic-datasource-spring-boot-starterコンポーネントを使用してマルチデータソース構成を実装します

1はじめに

dynamic-datasource-spring-boot-starterこれは、複数のデータソースをすばやく統合するためのスプリングブートベースのスターターです。

環境要件:

jdk 1.7+
springboot 1.4.x或1.5.x或2.x.x

特性:

  • マルチデータベース、読み取り/書き込み分離、1つのマスターと複数のスレーブ、またはその他の混合モードに適したデータグループ化をサポートします
  • 構成ファイルでアンダースコアで区切られたすべてのデータソースの場合、ヘッダーはグループの名前であり、同じグループ名のデータソースはグループの下で再生されます。たとえば、slave_1とslave_2はスレーブグループの下に配置されます
  • メソッドのアノテーションは、クラスのアノテーションよりも優先されます
  • ENC()データベース構成情報を暗号化するメソッドの使用をサポートします。

その他の機能については、公式ドキュメントを参照してください

2.使用する

依存関係をインポートする

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.4.1</version>
</dependency>

2.1マスタースレーブライブラリを構成する

構成ファイルを変更します

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        master:
          url: jdbc:mysql://ip1:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
        slave_1:
          url: jdbc:mysql://ip2:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
        slave_2:
          url: jdbc:mysql://ip3:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver

使用する場合は、メソッドまたはクラスの@DSアノテーションスイッチを使用してください

次のようにクラスに追加しました@DS("slave")。つまり、このクラスのメソッドにアクセスすると、データソースグループslaveからデータソースを取得します。上記の構成によれば、slave_1とslave_2の2つのデータソースがあります。次に、負荷に応じてデータソースを使用します。バランス戦略では、同じグループの下のデータソースを選択します。

同時に、メソッドに追加したので、listOrder2メソッド@DS("slave_1")にアクセスlistOrder2するときに、最初にメソッドの@DSアノテーションを識別しslave_1、データをクエリします。

@DSアノテーションが1つしかない場合は、デフォルトのデータソースを意味します

@Service
@DS("slave")
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
    
    @Override
    public List<Order> listOrder(){
        return this.list();
    }
    
    @Override
    @DS("slave_1")
    public List<Order> listOrder2(){
        return this.list();
    }
}

2.2読み取り/書き込み分離

dynamic-datasource読み取りと書き込みの分離を構成することも非常に便利です。次の構成のように、対応する読み取りライブラリと書き込みライブラリを構成するだけで、マスターライブラリマスターに書き込み、スレーブライブラリスレーブに読み取ります。

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        master:
          url: jdbc:mysql://ip1:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
        slave_1:
          url: jdbc:mysql://ip2:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
        slave_2:
          url: jdbc:mysql://ip3:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver

次に、メソッドまたはクラスにマークを付け、書き込まれたメソッドまたはクラスにマークを付け@DS("master")、読み取りメソッドまたはクラスにマークを付ける必要があります。@DS("slave")

このようにして、読み取りと書き込みの分離が実現されます。もちろん、ここではデータ同期の構成を行っていません。これを実現するために運河などのコンポーネントを使用できます。この章で説明するトピックに属していないため、あまり拡張しません。

@Service
@DS("slave")
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
    
    @Override
    public List<Order> listOrder(){
        return this.list();
    }

    @Override
    public Order getByOrderId(Long id){
        return this.getById(id);
    }
    
    @Override
    @DS("master")
    public boolean updateOrder(Order order){
        return this.update(order);
    }
}

2.3複数のデータソース

さまざまなタイプのデータベースを使用する場合は、dynamic-datasourceそれらを均一に構成することもできます。これにより、mysql、oracle、sqlserver、postgresql、h2などのデータベースがサポートされます。次のように

datasource:
        # 数据源1
        db1:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: oracle.jdbc.OracleDriver
          url: jdbc:oracle:thin:@ip:1525:order_test
          username: root
          password: 123456 
        # 数据源2   
       db2:
          url: jdbc:mysql://ip2:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver

dynamic-datasource使い方はとても簡単で、実際のプロジェクトで体験する必要があるので、この号の内容は終わりです。

より新鮮なコンテンツについては、公式アカウントをフォローしてください

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_24950043/article/details/124137673