ShardingSphere 5.3 シリーズ Spring 構成アップグレードガイド | Spring Cloud 47

1. 背景

5.3.0このバージョンより前のバージョンでは、 、の設定方法ShardingSphere-JDBC同時にサポートされています。その中で、Springの設定方法と互換性を持たせるために、以下のような問題がコミュニティに持ち込まれています。Java APIYAMLSpring Boot StarterSpring Namespace

  • APIを追加・更新する場合、複数の設定ファイルを調整する必要があり、多大な作業が必要となる
  • コミュニティは複数の設定ドキュメントと例を維持する必要があります
  • Spring Beanライフサイクル管理は、プロジェクトの他の依存関係に対して脆弱です (例: 適切に機能しPostProcessorない
  • Spring Boot Starterそして、Spring Namespace構成スタイルはShardingSphere標準とはかなり異なりYAMLます
  • Spring Boot Starterバージョンの影響を受けるため、追加の構成互換性の問題が発生しますSpring NamespaceSpring

上記の考慮事項に基づいて、コミュニティはすべての依存関係と構成サポートを削除することを決定しました。ShardingSphereShardingSphere 5.3.0 ReleaseSpring

ではSpring Boot、または を使用する必要があるユーザーはSpring Namespace元のユーザーにアクセスし、アップグレードする方法を教えてください。この記事では、これらの質問に答えます。ShardingSphere-JDBCShardingSphere

2. 影響範囲

2.1 Maven の依存関係

Spring Boot プロジェクトを例として、それ以降のバージョンにアップグレードするShardingSphere 5.3.0と、元の関連依存関係が無効になります。

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
    <version>${shardingsphere.version}</version>
</dependency>

に調整:

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>shardingsphere-jdbc-core</artifactId>
    <version>${shardingsphere.version}</version>
</dependency>

2.2 カスタムアルゴリズム

Springモジュールを削除すると、AlgorithmProvided関連するクラスも削除されます。ユーザーが以前にカスタム アルゴリズムでBeanインジェクション、更新後は無効になります。アルゴリズムでSpring Bean使用する、開発者はそれらを積極的に管理する必要があります。

2.3 トランザクション

@ShardingSphereTransactionTypeメソッドレベルのトランザクション宣言をサポートするために使用されるアノテーションも削除されます。ユーザーがメソッド レベルでトランザクション タイプを変更する必要がある場合は、Java APIメソッドを。

分散トランザクションについては、詳細な構成アップグレードのドキュメントが後で整理される予定です。

2.4 設定ファイル

5.3.0バージョンをアップグレードすると、元の構成Spring Boot StarterまたはSpring Namespaceデータソース構成は無効になります。

3. アップグレードガイド

3.1 ShardingSphere ドライバーの概要

5.1.2このバージョンからは、コードを変更せずに構成を通じてのみアクセスして使用できるShardingSphere-JDBCネイティブJDBCドライバー。ShardingSphereDriverこのアクセス方法を使用すると、より統一されShardingSphere-JDBC一貫性のあるShardingSphere-Proxy構成ファイル形式を、わずかな変更を加えるだけで再利用できます。

5.3.xバージョンにアップグレードした後、 を使用しているユーザー、またはからアクセスすることをお勧めしますSpring Boot StarterSpring NamespaceShardingSphereDriverShardingSphere-JDBC

3.2 Spring Boot Starter を使用したアップグレード ガイド

私の前回の記事を例に挙げてみましょう。

Spring Boot は ShardingSphere シャーディング ツール AutoTable を統合 (2) - 自動シャーディング アルゴリズムの例 | Spring Cloud 46

依存関係を置き換えるには、第2.1を参照してください。Maven

3.2.1 設定ファイルのアップグレード

3.2.1.1 アップグレード前

application.yml:

server:
  port: 8844

spring:
  application:
    name: @artifactId@
  shardingsphere:
    # 数据源配置
    datasource:
      names: ds1,ds2
      ds1:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.0.35:3306/db1?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
        username: root
        password: '1qaz@WSX'
      ds2:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.0.46:3306/db2?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
        username: root
        password: '1qaz@WSX'

    # 定义规则
    rules:
      sharding:
        # 采用自动分片算法
        autoTables:
          # 取模
          t_auto_order_mod:
            actualDataSources: ds$->{
    
    1..2}
            sharding-strategy:
              standard:
                sharding-column: order_id
                sharding-algorithm-name: auto_order_mod
            # 分布式序列策略
            key-generate-strategy:
              # 自增列名称,缺省表示不使用自增主键生成器
              column: order_id
              # 分布式序列算法名称
              key-generator-name: snowflake
          # 散列取模
          t_auto_order_hash_mod:
            actualDataSources: ds1
            sharding-strategy:
              standard:
                sharding-column: order_id
                sharding-algorithm-name: auto_order_hash_mod
            # 分布式序列策略
            key-generate-strategy:
              # 自增列名称,缺省表示不使用自增主键生成器
              column: order_id
              # 分布式序列算法名称
              key-generator-name: snowflake
          # 容量范围
          t_auto_order_volume_range:
            actualDataSources: ds$->{
    
    1..2}
            sharding-strategy:
              standard:
                sharding-column: price
                sharding-algorithm-name: auto_order_volume_range
            # 分布式序列策略
            key-generate-strategy:
              # 自增列名称,缺省表示不使用自增主键生成器
              column: order_id
              # 分布式序列算法名称
              key-generator-name: snowflake
          # 边界范围
          t_auto_order_boundary_range:
            actualDataSources: ds$->{
    
    1..2}
            sharding-strategy:
              standard:
                sharding-column: price
                sharding-algorithm-name: auto_order_boundary_range
            # 分布式序列策略
            key-generate-strategy:
              # 自增列名称,缺省表示不使用自增主键生成器
              column: order_id
              # 分布式序列算法名称
              key-generator-name: snowflake
          # 自动日期间隔
          t_auto_order_auto_interval:
            actualDataSources: ds$->{
    
    1..2}
            sharding-strategy:
              standard:
                sharding-column: create_time
                sharding-algorithm-name: auto_order_auto_interval
            # 分布式序列策略
            key-generate-strategy:
              # 自增列名称,缺省表示不使用自增主键生成器
              column: order_id
              # 分布式序列算法名称
              key-generator-name: snowflake
        # 分片算法配置
        sharding-algorithms:
          # 取模
          auto_order_mod:
            type: MOD
            props:
              sharding-count: 6
          # 散列取模
          auto_order_hash_mod:
            type: HASH_MOD
            props:
              sharding-count: 6
          # 容量范围
          auto_order_volume_range:
            type: VOLUME_RANGE
            props:
              range-lower: 0
              range-upper: 20000
              sharding-volume: 10000
          # 边界范围
          auto_order_boundary_range:
            type: BOUNDARY_RANGE
            props:
              sharding-ranges: 10,15,100,12000,16000
          # 自动日期间隔
          auto_order_auto_interval:
            type: AUTO_INTERVAL
            props:
              datetime-lower: 2023-05-07 00:00:00
              datetime-upper: 2023-05-10 00:00:00
              sharding-seconds: 86400
        # 分布式序列算法配置(如果是自动生成的,在插入数据的sql中就不要传id,null也不行,直接插入字段中就不要有主键的字段)
        keyGenerators:
          # 分布式序列算法名称
          snowflake:
            # 分布式序列算法类型
            type: SNOWFLAKE
    props:
      sql-show: true #显示sql

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.2.1.2 アップグレード後

application.yml: 元のShardingSphere関連構成をShardingSphereDriver構成アイテムに置き換えます。

server:
  port: 8844

spring:
  application:
    name: @artifactId@
  datasource:
    driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
    url: jdbc:shardingsphere:classpath:shading-auto-tables-algorithm.yaml
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

resourcesディレクトリの下にyaml次のような新しい構成ファイルを作成し、ユーザー マニュアル - YAML 構成」に従って元の構成コンテンツを書き換えます。shading-auto-tables-algorithm.yaml

dataSources:
  ds1:
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://192.168.0.35:3306/db1?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
    username: root
    password: '1qaz@WSX'
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1

  ds2:
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://192.168.0.46:3306/db2?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
    username: root
    password: '1qaz@WSX'
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
rules:
  - !SHARDING
    autoTables:
      # 取模
      t_auto_order_mod:
        actualDataSources: ds$->{
    
    1..2}
        shardingStrategy:
          standard:
            shardingColumn: order_id
            shardingAlgorithmName: auto_order_mod
        # 分布式序列策略
        keyGenerateStrategy:
          # 自增列名称,缺省表示不使用自增主键生成器
          column: order_id
          # 分布式序列算法名称
          keyGeneratorName: snowflake
      # 散列取模
      t_auto_order_hash_mod:
        actualDataSources: ds1
        shardingStrategy:
          standard:
            shardingColumn: order_id
            shardingAlgorithmName: auto_order_hash_mod
        # 分布式序列策略
        keyGenerateStrategy:
          # 自增列名称,缺省表示不使用自增主键生成器
          column: order_id
          # 分布式序列算法名称
          keyGeneratorName: snowflake
      # 容量范围
      t_auto_order_volume_range:
        actualDataSources: ds$->{
    
    1..2}
        shardingStrategy:
          standard:
            shardingColumn: price
            shardingAlgorithmName: auto_order_volume_range
        # 分布式序列策略
        keyGenerateStrategy:
          # 自增列名称,缺省表示不使用自增主键生成器
          column: order_id
          # 分布式序列算法名称
          keyGeneratorName: snowflake
      # 边界范围
      t_auto_order_boundary_range:
        actualDataSources: ds$->{
    
    1..2}
        shardingStrategy:
          standard:
            shardingColumn: price
            shardingAlgorithmName: auto_order_boundary_range
        # 分布式序列策略
        keyGenerateStrategy:
          # 自增列名称,缺省表示不使用自增主键生成器
          column: order_id
          # 分布式序列算法名称
          keyGeneratorName: snowflake
      # 自动日期间隔
      t_auto_order_auto_interval:
        actualDataSources: ds$->{
    
    1..2}
        shardingStrategy:
          standard:
            shardingColumn: create_time
            shardingAlgorithmName: auto_order_auto_interval
        # 分布式序列策略
        keyGenerateStrategy:
          # 自增列名称,缺省表示不使用自增主键生成器
          column: order_id
          # 分布式序列算法名称
          keyGeneratorName: snowflake
    # 分片算法配置
    shardingAlgorithms:
      # 取模
      auto_order_mod:
        type: MOD
        props:
          sharding-count: 6
      # 散列取模
      auto_order_hash_mod:
        type: HASH_MOD
        props:
          sharding-count: 6
      # 容量范围
      auto_order_volume_range:
        type: VOLUME_RANGE
        props:
          range-lower: 0
          range-upper: 20000
          sharding-volume: 10000
      # 边界范围
      auto_order_boundary_range:
        type: BOUNDARY_RANGE
        props:
          sharding-ranges: 10,15,100,12000,16000
      # 自动日期间隔
      auto_order_auto_interval:
        type: AUTO_INTERVAL
        props:
          datetime-lower: "2023-05-07 00:00:00"
          datetime-upper: "2023-05-10 00:00:00"
          sharding-seconds: 86400
    # 分布式序列算法配置(如果是自动生成的,在插入数据的sql中就不要传id,null也不行,直接插入字段中就不要有主键的字段)
    keyGenerators:
      # 分布式序列算法名称
      snowflake:
        # 分布式序列算法类型
        type: SNOWFLAKE
props:
  sql-show: true

4. 結論

このアップグレードにより、 と の間の構成の違い大幅にShardingSphere-JDBC減少し、ユーザーがクラスタ アーキテクチャにスムーズに移行するための強固な基盤が築かれ、構成の互換性の標準化。ShardingSphere-ProxyShardingSphere-JDBCShardingSphereAPI

ShardingSphere新規ユーザーにとって、ShardingSphereDriver独自の構成方法により煩雑な構成が軽減され、簡単に開始できるようになります。

おすすめ

転載: blog.csdn.net/ctwy291314/article/details/130600123