Java binLog日志监听方式

 更新时间:2024年11月15日 10:40:51   作者:Liu.jie  
文章介绍了如何在Windows下开启MySQL的binLog日志,并提供了一个Java代码示例,演示如何监听指定的表并进行处理逻辑

Java binLog日志监听

监听指定的表去做一些处理逻辑,首先是要开启M有SQL的配置,然后再撸代码。

一、Windows下开启MySQL binLog日志

首先要开启MySQL的BinLog 管理

show variables like '%log_bin%';

如果发现是OFF,打开mysql文件夹下面的my.ini,修改一下

如果不知道my.ini 在哪里,打开【服务】-> 右击属性

拉到最后就可以看见my.ini,然后找到文件后

[mysqld] 下面加

# 开启bin-log
log-bin=mysql-bin # 开启binlog功能
binlog-format=ROW # 设置binlog格式
server_id=1 # 设置服务ID号

然后 重启服务,就会发现已经起好了

二、Java代码示例演示

首先引入Maven包

 <dependency>
     <groupId>com.github.shyiko</groupId>
     <artifactId>mysql-binlog-connector-java</artifactId>
     <version>0.21.0</version>
 </dependency>

上代码

import cn.hutool.core.collection.ListUtil;
import com.alibaba.fastjson2.JSON;
import com.github.shyiko.mysql.binlog.BinaryLogClient;
import com.github.shyiko.mysql.binlog.event.*;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.web.controller.websocket.AlarmWebSocket;
import com.ruoyi.web.service.IWidfireDataService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.List;
import java.util.Map;


/**
 * mysql bin log 日志监听
 */
@Component
@Slf4j
public class MySQLBinaryLogConfig {


    public static IWidfireDataService widfireDataService;

    @Autowired
    public void setSenderService(IWidfireDataService widfireDataService){
        MySQLBinaryLogConfig.widfireDataService= widfireDataService;
    }


    private static final List<String> TABLE_NAME = ListUtil.of("alart_ai"); //数据库表,需要监听的表


    {
        System.out.println("启动监听:启动中");
        getThread().start();
        System.out.println("启动监听:成功");
    }

    public Thread getThread() {
        BinaryLogClient client = new BinaryLogClient("127.0.0.1", 3306, "root", "123456");
        client.setServerId(1);
        return new Thread(() -> {
            client.registerEventListener(event -> {
                String table =null;
                final EventData data = event.getData();
                if (data instanceof TableMapEventData) {
                    TableMapEventData tableMapEventData = (TableMapEventData) data;
                    String database = tableMapEventData.getDatabase();
                    table = tableMapEventData.getTable();

                    log.info("数据表:{},data:{},database:{}",table,data.toString(),database);
                }else if (data instanceof UpdateRowsEventData) {
                    UpdateRowsEventData tableMapEventData = (UpdateRowsEventData) data;

                    System.out.println("更新:");
                } else if (data instanceof WriteRowsEventData) {
                    System.out.println("添加:");
                } else if (data instanceof DeleteRowsEventData) {
                    System.out.println("删除:");
                }

                if(StringUtils.isNotEmpty(table) && TABLE_NAME.contains(table)){
                    log.info("<<<<<< 收到MySQL binLog 日志推送 >>>>>>>");
                    //开始编写具体的逻辑
                    
                }

            });
            try {
                client.connect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        });

    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Springboot主程序类注解配置过程图解

    Springboot主程序类注解配置过程图解

    这篇文章主要介绍了Springboot主程序类注解配置过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Java中Exception和Error的区别详解

    Java中Exception和Error的区别详解

    在 Java 开发面试中,Exception 和 Error 的区别是一个经典问题,这个问题不仅考察我们对 Java 异常处理机制的理解,还考察我们在实际开发中如何处理异常的能力,所以本文主要给大家介绍一下Java中Exception和Error的区别,需要的朋友可以参考下
    2025-04-04
  • 一文搞懂String的intern()方法

    一文搞懂String的intern()方法

    这篇文章主要给大家介绍String的intern()方法,文中有详细的代码示例,感兴趣的小伙伴让我们一起来看看这究竟是个什么玩意
    2023-06-06
  • Spring AOP 与代理的概念与使用

    Spring AOP 与代理的概念与使用

    大家知道我现在还是一个 CRUD 崽,平时用 AOP 也是 CV 大法。最近痛定思痛,决定研究一下 Spring AOP 的原理。 这里写一篇文章总结一下。主要介绍 Java 中 AOP 的实现原理,最后以两个简单的示例来收尾。
    2020-10-10
  • Java 关于eclipse导入项目发生的问题及解决方法(推荐)

    Java 关于eclipse导入项目发生的问题及解决方法(推荐)

    下面小编就为大家分享一篇Java 关于eclipse导入项目发生的问题及解决方法(推荐),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • IDEA中的.iml文件和.idea文件夹使用方式

    IDEA中的.iml文件和.idea文件夹使用方式

    这篇文章主要介绍了IDEA中的.iml文件和.idea文件夹使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • java 2d画图示例分享(用java画图)

    java 2d画图示例分享(用java画图)

    这篇文章主要介绍了java 2D画图示例(用java画图),需要的朋友可以参考下
    2014-04-04
  • 基于SpringBoot实现验证码功能(两种验证码方式)

    基于SpringBoot实现验证码功能(两种验证码方式)

    这篇文章主要介绍了基于SpringBoot实现验证码功能,今天我们介绍的是两种主流的验证码,一种就是进行计算的验证码,另外一种就是不需要计算,直接输入的验证码,需要的朋友可以参考下
    2024-08-08
  • java NIO实现简单聊天程序

    java NIO实现简单聊天程序

    这篇文章主要为大家详细介绍了java NIO实现简单聊天程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • SpringBoot项目jar发布后如何获取jar包所在目录路径

    SpringBoot项目jar发布后如何获取jar包所在目录路径

    这篇文章主要介绍了SpringBoot项目jar发布后如何获取jar包所在目录路径,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论