Java 实现实时监听MySQL数据库变更MySQLBinListener

这篇具有很好参考价值的文章主要介绍了Java 实现实时监听MySQL数据库变更MySQLBinListener。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、导出需要的类和接口

2、 定义 MySQLBinlogListener类

3、私有方法,启动重连定时器

4、完整代码


java监控mysql数据变化,全栈,后端,MySQL,数据库,mysql,java

 

编写一个MySQL数据库实时变更的监听器。

为什么要编写这个一个监听器:为了实时监测和响应MySQL数据库中的变更事件

  1. 实时数据同步:通过监听MySQL Binlog,可以捕获数据库的变更操作,例如插入、更新、删除等,从而能够实时地获取数据的变动情况。这对于需要及时同步数据的应用场景非常重要,例如实时分析、数据同步等
  2. 数据库监控和审计:通过监听数据库的变更事件,可以实现对数据库的实时监控和审计功能。你可以捕获和记录数据库中的每个操作,了解数据库的变更情况,同时也方便进行故障排查和安全审计。
  3. 数据变更触发业务逻辑:当数据库中的数据发生变化时,可以通过监听器触发相应的业务逻辑。例如,在某个表发生变更时,可以发送通知、调用其他服务或者进行数据处理等操作。
  4. 数据缓存和更新:通过监听数据库变更事件,可以及时更新应用程序中的缓存数据,提高应用程序的性能和响应速度。当数据库数据变化时,可以通过监听器自动刷新缓存,确保应用程序使用的数据是最新的。

总之:写这样的监听器可以提供实时数据同步、数据库监控和审计、业务逻辑触发、数据缓存更新以及异构数据集成等多种好处。

那我们就开始来写一个这么的功能:

1、导出需要的类和接口

import com.github.shyiko.mysql.binlog.BinaryLogClient;
import com.github.shyiko.mysql.binlog.event.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

接下来,使用一个Spring组件标记

@Component

2、 定义 MySQLBinlogListener类

public class MySQLBinlogListener {

定义一个常量,表明定义的是重连间隔时间,单位可以设为毫秒。

private static final int RECONNECT_INTERVAL = 10000;

 定义一个定时任务,用于定时尝试重新连接MySQL服务器

private static Timer reconnectTimer;

定义一个BinaryLogClient对象,用于连接到MySQL服务器

private static BinaryLogClient client;

定义一个用于依赖注入的ApplicationContext对象

@Autowired
private static ApplicationContext applicationContext;

编辑程序的入口方法,它会调用startMySQLBinlogListener方法来开始监听MySQL Binlog事件

public void main(String[] args) {
    startMySQLBinlogListener();
}

这是startMySQLBinlogListener方法,它用于启动MySQL Binlog监听器

public static void startMySQLBinlogListener() {

创建一个BinaryLogClient对象,指定MySQL服务器的主机名、端口号、数据库名、用户名和密码。

client = new BinaryLogClient("127.0.0.1",3306, "你的数据库表","root", "密码");

设置BinaryLogClient对象的一些属性,包括保持连接、心跳包发送间隔和心跳包连接超时时间。

client.setKeepAlive(true);
client.setKeepAliveInterval(60 * 1000);
client.setKeepAliveConnectTimeout(5 * 1000);

注册事件监听器,对不同类型的事件做出响应。在这里,我们对TableMapEventData类型的事件进行处理,根据表名发送WebSocket消息;对UpdateRowsEventData、WriteRowsEventData、DeleteRowsEventData类型的事件进行输出日志。

client.registerEventListener(event -> {
    try {
        EventData data = event.getData();
        if (data instanceof TableMapEventData) {
            TableMapEventData tableMapEventData = (TableMapEventData) data;
            String database = tableMapEventData.getDatabase();
            String table = tableMapEventData.getTable();
            WebsocketService websocketService = new WebsocketService();
            if ("你的数据库表".equalsIgnoreCase(table)) {
                websocketService.groupSending("你的数据库表字段");
            }
            if ("你的数据库表".equalsIgnoreCase(table)) {
                websocketService.groupSending("你的数据库表字段");
            }
        } else if (data instanceof UpdateRowsEventData) {
            System.out.println("更新:");
            System.out.println(data.toString());
        } else if (data instanceof WriteRowsEventData) {
            System.out.println("添加:");
            System.out.println(data.toString());
        } else if (data instanceof DeleteRowsEventData) {
            System.out.println("删除:");
            System.out.println(data.toString());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
});

注册生命周期监听器,用于处理连接成功、通信异常、事件数据解析异常和连接断开等情况

client.registerLifecycleListener(new BinaryLogClient.LifecycleListener() {
    @Override
    public void onConnect(BinaryLogClient client) {
        System.out.println("MySQL数据库已连接!");
    }

    @Override
    public void onCommunicationFailure(BinaryLogClient client, Exception ex) {
        System.out.println("已执行通信故障方法!");
        ex.printStackTrace();
    }

    @Override
    public void onEventDeserializationFailure(BinaryLogClient client, Exception ex) {
        System.out.println("已执行反质化方法!");
        ex.printStackTrace();
    }

    @Override
    public void onDisconnect(BinaryLogClient client) {
        System.out.println("MySQL数据库已断开!");
        startReconnectTimer();
    }
});

3、私有方法,启动重连定时器

该功能如下:

private static void startReconnectTimer() {

如果已存在重连定时器,先取消之前的定时任务

if (reconnectTimer != null) {
    reconnectTimer.cancel();
}

创建一个新的重连定时器,并执行定时任务。定时任务中会尝试重新连接MySQL服务器

reconnectTimer = new Timer();
reconnectTimer.schedule(new TimerTask() {
    @Override
    public void run() {
        boolean isConnected = client != null && client.isConnected();
        try {
            if (isConnected) {
                System.out.println("和数据库断开连接。重连。。。。。。");
                client.disconnect();
            }
            client.connect();
        } catch (IOException e) {
            e.printStackTrace();
            startReconnectTimer();
        }
    }
}, RECONNECT_INTERVAL);
}

这就是整段代码的解释,它实现了一个MySQL Binlog监听器,能够监听MySQL数据库的变更事件并做出相应的处理。

4、完整代码

需要私聊。。。。。。文章来源地址https://www.toymoban.com/news/detail-599197.html

到了这里,关于Java 实现实时监听MySQL数据库变更MySQLBinListener的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【flume实时采集mysql数据库的数据到kafka】

    最近做了flume实时采集mysql数据到kafka的实验,做个笔记,防止忘记 !!!建议从头看到尾,因为一些简单的东西我在前面提了,后面没提。 Kafka搭建:https://blog.csdn.net/cjwfinal/article/details/120803013 flume搭建:https://blog.csdn.net/cjwfinal/article/details/120441503?spm=1001.2014.3001.5502 编写配置

    2024年02月03日
    浏览(60)
  • java代码实现,利用JDBC接口-连接Mysql数据库

    1、JDBC本质上是一个接口,也就是java语言操作数据库的一套API(应用程序编程接口), 接口就规则,也就是sun公司创建了一个jdbc接口,各个sql(数据库管理系统)去实现接口提供jar包。其优点JDBC不是指单一操作某一个数据库。各个厂商使用相同的接口。不同的sql厂家实现

    2024年02月09日
    浏览(71)
  • Java(一):创建 Spring Boot 项目并实现连接操作MySQL数据库

    MySQL 命令 Maven 相关地址 下载地址: https://maven.apache.org/ maven配置方法地址: https://developer.aliyun.com/mvn/guide 仓库搜索地址: https://mvnrepository.com/ https://repo.maven.apache.org/ maven 本地配置 conf/settings.xml 下载 idea 并配置本地环境 maven Maven 构建 生命周期 Maven 的构建 生命周期 包括 三

    2024年02月07日
    浏览(69)
  • 使用开源实时监控系统 HertzBeat 5分钟搞定 Mysql 数据库监控告警

    Mysql 数据库介绍 MySQL是一个开源关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的开源关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 HertzBeat 介绍 H

    2024年02月10日
    浏览(42)
  • 如何安全地变更数据库 Schema

    最近 Reddit 的 r/golang 下有人问了一个如何做数据库 schema 变更的问题,不到一天,就有了超过 40 条回复。 数据库 schema 变更一直是让程序员头疼的问题,但又不得不面对,毕竟业务要发展,产品要迭代,添加新的功能往往需要去修改数据库的结构,比如添加一个新的字段来保

    2024年02月10日
    浏览(49)
  • 数据库字段变更监控平台设计开发

      在开发过程中,在值班解决客服问题时,在分析定位别人写的业务代码问题时, 重点是不是自己写的代码 ,只看到了数据库中落库最终数据,并不知道业务逻辑问题发生时数据库表中当时数据情况?如果能知道当时数据情况,就能更准,更快的定位到问题,可能大家对

    2024年02月15日
    浏览(65)
  • 基于java Swing 和 mysql实现的购物管理系统(源码+数据库+说明文档+运行指导视频)

    本项目是一套基于java Swing 和 mysql实现的购物管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,确保可以运行! 技术栈:Jav

    2024年02月10日
    浏览(46)
  • (解析+源码)基于JAVA Swing+MySQL实现学生信息管理系统(增、删、改、查)数据库/文件存储

    本文适合 有一定JAVA编程基础(听过一点课的同学) 的同学“食用”,源代码都在文末 源代码(点击跳转) ,第四部分是各个模块的实现,新建一个工程把下面代码添加进去,然后在数据库里按id-username-password和id-name-sex-telephone-number-birthday-note创建两个表,在Connect.java里面将us

    2024年02月04日
    浏览(53)
  • 基于java swing和mysql实现的汽车租赁管理系统(源码+数据库+文档+运行指导视频)

    本项目是一套基于java swing和mysql实现的汽车租赁管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,确保可以运行! 该系统功能

    2024年02月10日
    浏览(51)
  • 基于java Swing 和 mysql实现的飞机订票系统(源码+数据库+ppt+ER图+流程图+架构说明+论文+运行视频指导)

    本项目是一套基于java Swing 和 mysql实现的飞机订票系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,确保可以运行! 技术栈:Jav

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包