Binlog4j 1.2.0 リリース、Java 軽量バイナリ ログ クライアント

ビンログ4j

軽量の Mysql Binlog クライアント。ダウンタイム後の継続的な読み取り、高可用性クラスターなどの機能を提供します。

プロジェクトの特徴

  • クラスター モードでは、クラスター展開を通じてサービスの高可用性が保証されます。

  • ダウンタイム中のデータ損失を避けるために、ダウンタイム後も読み取りを続けます。

  • データ変換、汎用カプセル化ビンログ イベントに基づくシリアル化データ。

  • 従来のプロジェクトおよび Spring Boot / Cloud プロジェクトと互換性があります。

  • Spring Boot 2.x および Spring Boot 3.x バージョンと互換性があります。プロジェクトの特徴

変更履歴 (1.2.0)

[新規] BinlogClient クラスの接続メソッドのログ出力。
[新規] Binlog4jException.class は、RuntimeException.class 例外処理を置き換えます。
[追加] binlog4j-spring-boot-starter パッケージ spring.binlog4j.enabled 構成、デフォルトは true です。
GsonUtils ユーティリティ クラスを utils パッケージに [追加] し、Gson メソッドを提供します。
[アップグレード] spring-boot をバージョン 2.7.14 にします。
[アップグレード] バージョン 3.23.3 に再試行します。
[アップグレード] gson をバージョン 2.10.1 にアップグレードします。
[アップグレード] jedis をバージョン 4.4.3 に

ダウンロードとインストール

<dependency>
   <groupId>com.gitee.Jmysy</groupId>
   <artifactId>binlog4j-core</artifactId>
   <version>latest.version</version>
</dependency>

または

implementation group: 'com.gitee.Jmysy', name: 'binlog4j-core', version: 'latest.version'

使いやすい

BinlogClient を介して binlog クライアントを作成し、binlog イベント通知を受け入れるために IBinlogEventHandler が使用されます。このインターフェイスではジェネリックスの使用が許可され、データはハンプ ルールに従ってカプセル化されます。

public class BootStrap {

    public static void main(String[] args) {
        
        BinlogClientConfig clientConfig = new BinlogClientConfig();
        clientConfig.setHost("127.0.0.1");
        clientConfig.setPort(3306);
        clientConfig.setUsername("root");
        clientConfig.setPassword("taoren@123");
        clientConfig.setServerId(1990);
  
        IBinlogClient binlogClient = new BinlogClient(clientConfig);

        binlogClient.registerEventHandler("database", "table", new IBinlogEventHandler() {
            
            @Override
            public void onInsert(BinlogEvent event) {
                System.out.println("插入数据:{}", event.getData());
            }

            @Override
            public void onUpdate(BinlogEvent event) {
                System.out.println("修改数据:{}", event.getData());
            }

            @Override
            public void onDelete(BinlogEvent event) {
                System.out.println("删除数据:{}", event.getData());
            }
        });

        binlogClient.connect();
    }
}

高度な機能

Persistence を true に設定してダウンタイム後の継続読み取り機能を有効にすることで、Binlog4j は binlog のファイル名と位置を Redis に記録するため、同時に Redis の設定を行う必要があります。

public class BootStrap {

    public static void main(String[] args) {

        RedisConfig redisConfig = new RedisConfig();
        redisConfig.setHost("127.0.0.1");
        redisConfig.setPort(6379);
        redisConfig.setPassword("taoren@123");

        BinlogClientConfig clientConfig = new BinlogClientConfig();
        clientConfig.setHost("127.0.0.1");
        clientConfig.setPort(3306);
        clientConfig.setUsername("root");
        clientConfig.setPassword("taoren@123");
        clientConfig.setServerId(1990); // Client 编号
        clientConfig.setRedisConfig(redisConfig); // Redis 配置
        clientConfig.setPersistence(true); // 启用持久化 (宕机重启后, 从上次读取的位置开始)
        clientConfig.setMode(BinlogClientMode.cluster); // 高可用集群

        BinlogClient binlogClient = new BinlogClient(clientConfig);

        binlogClient.registerEventHandler("database", "table", new IBinlogEventHandler<User>() {

            @Override
            public void onInsert(BinlogEvent<User> event) {
                System.out.println("插入数据:{}", event.getData());
            }

            @Override
            public void onUpdate(BinlogEvent<User> event) {
                System.out.println("修改数据:{}", event.getData());
            }

            @Override
            public void onDelete(BinlogEvent<User> event) {
                System.out.println("删除数据:{}", event.getData());
            }
        });

        binlogClient.connect();
    }
}

スプリングブートスターター

<dependency>
    <groupId>com.gitee.Jmysy</groupId>
    <artifactId>binlog4j-spring-boot-starter</artifactId>
    <version>latest.version</version>
</dependency>

または

implementation group: 'com.gitee.Jmysy', name: 'binlog4j-spring-boot-starter', version: 'latest.version'

まず、application.yml に BinlogClient 構成を入力します。

spring:
  binlog4j:
    redis-config:
      host: 127.0.0.1
      port: 6379
      password: taoren@123
    client-configs:
      master:
        username: root
        password: taoren@123
        host: 127.0.0.1
        port: 3306
        serverId: 1990

単一監視監視

@BinlogSubscriber アノテーションを使用して、IBinlogEventHandler を登録する必要があるクライアントを指定し、監視するデータベースとテーブルを指定します。

@BinlogSubscriber(clientName = "master", database = "pear-admin", table ="sys_user")
public class UserEventHandler implements IBinlogEventHandler<User> {

    @Override
    public void onInsert(BinlogEvent<User> event) {
        System.out.println("插入数据:" + event.getData());
    }

    @Override
    public void onUpdate(BinlogEvent<User> event) {
        System.out.println("修改数据:" + event.getData());
    }

    @Override
    public void onDelete(BinlogEvent<User> event) {
        System.out.println("删除数据:" + event.getData());
    }

}

マルチテーブル監視

@BinlogSubscriber アノテーション データベースとテーブル プロパティはパターン マッチングをサポートしています。ジェネリックを指定しない IBinlogEventHandler の場合、event.getData() は Map<String, Object> 型であり、さまざまなテーブルのデータ構造と互換性を保つために使用されます。

@BinlogSubscriber(clientName = "master", database = ".*", table ="sys.*")
public class UserEventHandler implements IBinlogEventHandler {

    @Override
    public void onInsert(BinlogEvent event) {
        System.out.println("数据库:" + event.getDatabase());
        System.out.println("数据表:" + event.getTable());
        System.out.println("新数据:" + event.getData());
    }

    @Override
    public void onUpdate(BinlogEvent event) {
        System.out.println("数据库:" + event.getDatabase());
        System.out.println("数据表:" + event.getTable());
        System.out.println("原数据:" + event.getOriginalData());
        System.out.println("新数据:" + event.getData());
    }

    @Override
    public void onDelete(BinlogEvent event) {
        System.out.println("数据库:" + event.getDatabase());
        System.out.println("数据表:" + event.getTable());
        System.out.println("新数据:" + event.getData());
    }

}

マスター データ ソースのすべてのデータベース内のすべてのテーブルのデータ変更を監視します [最も柔軟]

@BinlogSubscriber(clientName = "master")

マスター データ ソース pear-admin データベース内のすべてのテーブルのデータ変更を監視します。

@BinlogSubscriber(clientName = "master", database="pear-admin")

マスター データ ソース pear-admin データベースのユーザー テーブルのデータ変更を監視する

@BinlogSubscriber(clientName = "master", database="pear-admin", table="user")

マスター データ ソースのすべてのデータベースのユーザー テーブルのデータ変更を監視します。

@BinlogSubscriber(clientName = "master", table="user")

マスター データ ソースのすべてのデータベースのユーザーで始まるテーブルのデータ変更を監視します

@BinlogSubscriber(clientName = "master", table="user.*")

おすすめ

転載: www.oschina.net/news/255310/binlog4j-1-2-0