Skip to content
  • Home
  • Python教學
  • 科技新聞資訊
  • 網站開發教學
Copyright 網絡設計教學 2025
Theme by ThemeinProgress
Proudly powered by WordPress
  • Home
  • Python教學
  • 科技新聞資訊
  • 網站開發教學
網絡設計教學網絡設計教學,網站網頁教學,軟體使用教學
  • You are here :
  • Home
  • 科技新聞資訊
  • 轻量级 Mysql Binlog 客户端 Binlog4j 加入 Dromara 社区 – 科技資訊
科技新聞資訊

轻量级 Mysql Binlog 客户端 Binlog4j 加入 Dromara 社区 – 科技資訊

Jiking 2023-09-03 Article

轻量级 Mysql Binlog 客户端 Binlog4j 加入 Dromara 社区

项目介绍

Binlog4j 是一款提供宕机续读,高可用集群,数据转换的 Binlog 客户端。

项目特性

  • 集群模式, 通过集群部署的方式,保证服务高可用。
  • 宕机续读, 避免宕机期间造成数据丢失。
  • 数据转换, 基于泛型封装 BinlogEvent 的序列化数据。
  • 兼容 传统项目 与 Spring Boot / Cloud 项目。
  • 兼容 Spring Boot 2.x 与 Spring Boot 3.x 版本。

应用场景

包括但不限于(1)数据同步(2)实时计算(3)数据审计(4)数据分析

下载安装


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

简单使用

通过 BinlogClient 创建客户端,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 的 filename 与 position 记录到 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); 
        clientConfig.setRedisConfig(redisConfig); 
        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();
    }
}

在 Spring Boot 集成


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

首先,在 application.yml 或 application.properties 中填写 Binlog4j 配置


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
      slave:
        username: root
        password: taoren@123
        host: 127.0.0.1
        port: 3306
        serverId: 1991


单表监听

使用 @BinlogSubscriber 注解, 指定 IBinlogEventHandler 需要注册到哪个客户端, 并且指定监听的 database 与 table。


@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 注解 database 与 table 属性支持 Pattern 匹配, 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());
    }

}

相关链接

Gitee: https://gitee.com/dromara/binlog4j

#轻量级 #Mysql #Binlog #客户端 #Binlog4j #加入 #Dromara #社区 #科技資訊

You may also like

有史以來最棒的公告 – Moist Esports 加入 Shopify Rebellion @ludwig @penguinz0

安裝 Joomla! 4 沙漠

Joomla:如何將 NOW() 與 DatabaseDriver-insertObject() 一起使用

Joomla:尋找每組具有最低列值的行,然後將不同的群組資料連接到另一個表

Joomla:使用 MySQL「LOAD DATA LOCAL INFILE」與 Joomla 資料庫連接對象

CMS Joomla 3.3,Desinstalar plantillas con gestor de extensiones,Curso completo en español,第 11 章

相关贴文:

  1. VOP消息倉庫演進之路|如何設計一個億級企業消息平台- 京東雲開發者的個人空間- 科技資訊
  2. 從雲原生到Serverless,我們對數據庫還有哪些想像? – 科技資訊編輯部的個人空間- 科技資訊
  3. 如何安裝 Joomla 4 和新功能
  4. 在 XAMPP 2023 上安裝 Joomla
  5. CMS Joomla 3.3,Desinstalar plantillas con gestor de extensiones,Curso completo en español,第 11 章
  6. Joomla:使用 MySQL「LOAD DATA LOCAL INFILE」與 Joomla 資料庫連接對象
  7. Joomla:尋找每組具有最低列值的行,然後將不同的群組資料連接到另一個表
  8. 安裝 Joomla! 4 沙漠
Tags: Binlog, binlog4j, Dromara, mysql, 加入, 客户端, 社区, 科技資訊, 轻量级, 轻量级 Mysql Binlog 客户端 Binlog4j 加入 Dromara 社区

近期文章

  • 如何使用Elementor設計漂亮的WooCommerce商店頁面(無代碼!)
  • 如何使用WordPress WooCommerce創建著陸頁類型電子商務網站
  • 遷移Shopify到WooCommerce
  • 如何使用Dreamhost(2025)🔥 -Dream -Host WooCommerce教程構建電子商務網站!
  • wooCommerce🇺🇸US全球ESIM應用程序針對190多個國家 /地區的旅行者,Esim Telecom(構建您的應用程序#75)
  • 管理WooCommerce中的價格
  • Conectando n8n no wooCommerce(intermaçãoPassoa passo)
  • de cero a tienda enlínea:configuracióninicial de wooCommerce
  • 修復WooCommerce訂單錯誤:“處理您的訂單有錯誤”

標籤雲

Dropshipping ecommerce JavaScript Joomla OSCHINA博客 python REBELLION Shopify Shopify 商店設置 Shopify 直銷 Woocommerce WordPress 代發貨 刀塔2 和 商店 商業 喬姆拉 在 如何創建 Shopify 商店 如何在 如何建立 Shopify 商店 如何開始代出貨 年 店舖教學 店鋪化 店鋪培訓 教學 獲獎產品 直銷 Shopify 直銷教程 科技資訊 程式碼 網路業務 網路賺錢 臉書廣告 與 行銷 詳解 購物 跨平台 運輸船 適合初學者的 Shopify 教學課程 適合初學者的直銷 電子商務

Copyright 網絡設計教學 2025