当前位置: 首页 > article >正文

springboot监听mysql的binlog日志

需要监控mysql数据库的增删改
1.找到mysql的配置文件开启binlog并重启mysql服务
修改mysql配置文件my.ini。添加下配置:
log_bin=mysql-bin
binlog-format=Row
2.创建springboot项目并引入相关jar包

	<!-- binlog监听 -->
    <dependency>
      <groupId>com.zendesk</groupId>
      <artifactId>mysql-binlog-connector-java</artifactId>
      <version>0.29.2</version>
    </dependency>

3.创建监听类

package binlogjt.getbinlog.Listener;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.core.env.Environment;

import com.github.shyiko.mysql.binlog.BinaryLogClient;
import com.github.shyiko.mysql.binlog.event.DeleteRowsEventData;
import com.github.shyiko.mysql.binlog.event.Event;
import com.github.shyiko.mysql.binlog.event.EventData;
import com.github.shyiko.mysql.binlog.event.EventHeader;
import com.github.shyiko.mysql.binlog.event.EventType;
import com.github.shyiko.mysql.binlog.event.TableMapEventData;
import com.github.shyiko.mysql.binlog.event.UpdateRowsEventData;
import com.github.shyiko.mysql.binlog.event.WriteRowsEventData;




@Component
public class BinlogListener {
	private static final Logger logger = LoggerFactory.getLogger(BinlogListener.class);
	
	@Resource
	private Environment env;
	
	private BinaryLogClient client = null;
	
	public BinlogListener() {
		
	}
	
	@PostConstruct
	public void start() {
		String hostname = env.getProperty("app.hostname");
		String port = env.getProperty("app.port");
		String username = env.getProperty("app.username");
		String password = env.getProperty("app.password");
		
		int port_number = Integer.parseInt(port);
		client = new BinaryLogClient(hostname, port_number, username, password);
        client.registerEventListener(this::onEvent);
        
        // 启动 Binary Log Client,springboot启动自动监听
        new Thread(() -> {
            try {
                client.connect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
	}
	
	private void onEvent(Event event) {
		EventHeader header = event.getHeader();
        //操作状态信息获取
        EventType etype = header.getEventType();
        //操作数据信息获取
        EventData edata = event.getData();
        
		//监听到变更操作
		if(etype == com.github.shyiko.mysql.binlog.event.EventType.EXT_UPDATE_ROWS) {
			UpdateRowsEventData updateData = (UpdateRowsEventData) edata;
			//获取的变更数据
        	System.out.println(updateData);
		}
		//监听到写入操作
        if(etype == com.github.shyiko.mysql.binlog.event.EventType.EXT_WRITE_ROWS) {
        	WriteRowsEventData writeData = (WriteRowsEventData) edata;
        	//获取的写入数据
        	System.out.println(writeData);
        }
        //监听到删除操作
        if(etype == com.github.shyiko.mysql.binlog.event.EventType.EXT_DELETE_ROWS) {
        	DeleteRowsEventData deleteData = (DeleteRowsEventData) edata;
        	//获取的删除数据
        	System.out.println(deleteData);
        }
	}
}


http://www.kler.cn/a/418076.html

相关文章:

  • 数据集搜集器(百科)008
  • 量化交易系统开发-实时行情自动化交易-8.2.发明者FMZ平台
  • [CTF/网络安全] 攻防世界 upload1 解题详析
  • Mybatis 支持延迟加载的详细内容
  • C#使用ExcelDataReader读取Xlsx文件为DataTable对象
  • 微服务即时通讯系统的实现(服务端)----(2)
  • Spring的事务管理
  • Serverless架构与AWS Lambda
  • 安卓逆向之Android-Intent介绍
  • Python Web 开发:FastAPI 基本概念与应用
  • 《Learn Three.js》学习(4) 材质
  • 高效智能的租赁管理系统助力企业数字化转型
  • 游戏引擎学习第26天
  • java与c#区别
  • 【Linux | 计网】TCP协议深度解析:从连接管理到流量控制与滑动窗口
  • vue多页面应用集成时权限处理问题
  • 局域网的网络安全
  • Flink维表join
  • 使用 Canal 实时从 MySql 向其它库同步数据
  • 【C++】赋值运算与变量交换的深入探讨
  • Agent构建总结(LangChain)
  • C/C++基础知识复习(32)
  • Clickhouse 数据类型
  • 【遥感综合实习】专题一 多时相多波段遥感影像的机器学习地物分类研究
  • 第十一课 Unity编辑器创建的资源优化_预制体和材质篇(Prefabs和Materials)详解
  • java-kafka面试相关基础题目整理01