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中LocalDateTime对象返回给前端格式化解决方案
在项目开发当中前后端使用什么样的时间格式,是一个值得关注的问题,这篇文章主要给大家介绍了关于Springboot中LocalDateTime对象返回给前端格式化的解决方案,文中通过代码介绍的非常详细,需要的朋友可以参考下2024-04-04SpringBoot整合Liquibase实现对数据库管理和迁移
Liquibase是一个用于用于跟踪、管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(rollback)到一致的状态,本文主要介绍SpringBoot与Liquibase的集成,需要的朋友可以参考下2024-11-11
最新评论