Spring Boot+Debezium:解决 MySQL Binlog监听

在当今的企业应用中,对数据变更进行实时捕获和处理是至关重要的。而Debezium作为一个强大的开源平台,能够实时捕获数据库的变化事件,为实时数据流处理提供了可靠的解决方案。在本文中,我们将探讨如何将Debezium与SpringBoot项目无缝集成,以便对MySQL Binlog进行监听和处理。

为什么选择Debezium?

  • 实时性:Debezium能够实时监控数据库的变更,捕获到变更事件并立即进行处理,使得应用能够及时响应数据的变化。

  • 可靠性:Debezium基于可靠的CDC(Change Data
    Capture)技术,能够保证数据的准确性和一致性,确保捕获到的变更事件能够被正确地处理。

  • 易用性:Debezium提供了丰富的API和文档,使得集成到SpringBoot项目中变得简单和容易。

如何整合Debezium到Spring Boot项目中?

1. 添加依赖

首先,我们需要在pom.xml中添加必要的依赖。包括SpringBoot的基础依赖和Debezium的MySQL连接器依赖。

<dependencies><!-- Spring Boot Starter Dependencies --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Debezium Dependencies --><dependency><groupId>io.debezium</groupId><artifactId>debezium-embedded</artifactId><version>1.8.0.Final</version></dependency><dependency><groupId>io.debezium</groupId><artifactId>debezium-connector-mysql</artifactId><version>1.8.0.Final</version></dependency>
</dependencies>

2. 配置Debezium

在SpringBoot项目的application.properties文件中,配置Debezium连接MySQL所需的参数。

# MySQL connection properties
debezium.mysql.hostname=localhost
debezium.mysql.port=3306
debezium.mysql.user=debezium
debezium.mysql.password=debezium
debezium.mysql.database.history=io.debezium.relational.history.FileDatabaseHistory
debezium.mysql.database.history.file.filename=/tmp/dbhistory.dat# Debezium connector properties
debezium.name=engine
debezium.connector.class=io.debezium.connector.mysql.MySqlConnector
debezium.database.hostname=${debezium.mysql.hostname}
debezium.database.port=${debezium.mysql.port}
debezium.database.user=${debezium.mysql.user}
debezium.database.password=${debezium.mysql.password}
debezium.database.server.id=85744
debezium.database.server.name=my-app-connector
debezium.database.include.list=mydatabase
debezium.table.include.list=mydatabase.mytable
debezium.database.history=${debezium.mysql.database.history}
debezium.database.history.file.filename=${debezium.mysql.database.history.file.filename}

3. 创建Debezium引擎配置类

创建一个Spring配置类,用于初始化和配置Debezium引擎。

package com.example.debezium.config;import io.debezium.config.Configuration;
import io.debezium.embedded.Connect;
import io.debezium.embedded.EmbeddedEngine;
import io.debezium.engine.format.Json;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Properties;@Configuration
public class DebeziumConfig {@Value("${debezium.name}")private String name;@Value("${debezium.connector.class}")private String connectorClass;@Value("${debezium.database.hostname}")private String hostname;@Value("${debezium.database.port}")private String port;@Value("${debezium.database.user}")private String user;@Value("${debezium.database.password}")private String password;@Value("${debezium.database.server.id}")private String serverId;@Value("${debezium.database.server.name}")private String serverName;@Value("${debezium.database.include.list}")private String includeList;@Value("${debezium.table.include.list}")private String tableIncludeList;@Value("${debezium.database.history}")private String databaseHistory;@Value("${debezium.database.history.file.filename}")private String databaseHistoryFile;@Beanpublic Configuration debeziumConfiguration() {Properties props = new Properties();props.setProperty("name", name);props.setProperty("connector.class", connectorClass);props.setProperty("database.hostname", hostname);props.setProperty("database.port", port);props.setProperty("database.user", user);props.setProperty("database.password", password);props.setProperty("database.server.id", serverId);props.setProperty("database.server.name", serverName);props.setProperty("database.include.list", includeList);props.setProperty("table.include.list", tableIncludeList);props.setProperty("database.history", databaseHistory);props.setProperty("database.history.file.filename", databaseHistoryFile);return Configuration.from(props);}@Beanpublic EmbeddedEngine debeziumEngine(Configuration config) {return EmbeddedEngine.create().using(config).notifying(record -> {// Handle the change event hereSystem.out.println(record);}).build();}
}

4. 创建监听器

编写一个监听器类,用于处理捕获到的数据库变化事件。

package com.example.debezium.listener;import io.debezium.engine.RecordChangeEvent;
import io.debezium.engine.format.Json;
import org.springframework.stereotype.Component;@Component
public class DebeziumListener implements EmbeddedEngine.CompletionCallback {@Overridepublic void handle(RecordChangeEvent<SourceRecord> event, EmbeddedEngine.Context context) {// 解析并处理事件String value = event.record().value().toString();System.out.println("Received event: " + value);}@Overridepublic void handle(Throwable throwable, EmbeddedEngine.Context context) {// 错误处理throwable.printStackTrace();}
}

5. 启动Debezium引擎

在SpringBoot的主类中启动Debezium引擎。

package com.example.debezium;import io.debezium.embedded.EmbeddedEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DebeziumApplication implements CommandLineRunner {@Autowiredprivate EmbeddedEngine debeziumEngine;public static void main(String[] args) {SpringApplication.run(DebeziumApplication.class, args);}@Overridepublic void run(String... args) throws Exception {new Thread(debeziumEngine).start();}
}

启动SpringBoot应用程序,Debezium引擎将开始监听MySQL的Binlog。当指定数据库或表的数据发生变化时,监听器会接收到变化事件,并打印或处理这些事件。
结论

通过上述步骤,我们成功地在SpringBoot项目中整合了Debezium,实现了对MySQL Binlog的监听。这样,我们可以实时捕获和处理数据库的变化事件,为数据同步、监控和分析等场景提供了强大的支持。希望本文对你有所帮助,在实际开发中能够灵活运用这一技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot集成GRPC

Springboot集成GRPC 一、springboot版本二、GRPC的pom依赖2.1 服务端2.2 客户端3.构建依赖 三、配置文件服务端客户端 四、 demo4.1 编写proto文件4.2 生成文件4.3 服务端重写方法4.4 客户端调用该方法 五、测试 一、springboot版本 <groupId>org.springframework.boot&l…

pycharm找不到conda可执行文件解决办法

解决办法 1、第一种 按照以下步骤&#xff0c;找到condabin文件下面&#xff0c;conda.bat 文件&#xff0c;把路径给复制下来&#xff0c;粘贴到 Conda 可执行文件&#xff0c;即可。 然后再点击加载环境&#xff0c;我这里是已经汉化了 pycharm &#xff0c;如何汉化&…

Linux - 用户管理

1 基本介绍 Linux系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统 2 添加用户 基本语法 //添加用户 useradd 用户名 实列(root权限下) useradd huchen…

Less语法

一:less作用 是CSS的预处理器,扩充了CSS语言,使CSS具有一定逻辑性、计算功能;通了less语法,生成.CSS文件; 二:具体使用规则 1 less变量设置属性值 语法规范: @变量名:属性值名;CSS属性:@变量名;eg:给box盒子添加粉色背景 @bgcolor:purple; .box{background-col…

C++——list的实现以及源码

前言&#xff1a; 最近学习了clist的实现&#xff0c;这让我对迭代器的理解又上升了一个新的高度&#xff0c;注意&#xff1a;代码里的list是放在一个叫zgw的命名空间里边&#xff0c;但是在实现list的代码中没有加namespace&#xff0c;这里给个注意&#xff0c;以后复习时能…

解密论文评审过程:SCI论文是匿名送审的吗?

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 前几天有位学员问我&#xff0c;审稿人能看见我论文的作者和单位信息吗&#xff1f;应该是双方都匿名才更公平啊。 同行评议&#xff0c;在不同的期刊操作还真不一样。有双方…

spring学习笔记一

前言&#xff08;第一性原理&#xff09; 那么spring解决问题&#xff1a;JAVA开发框架&#xff0c;spring是用来解决企业级Java应用开发的问题。 通过依赖注入和面向切面编程来灵活管理和配置代码&#xff0c;提供一套工具来帮助开发和配置代码&#xff0c;提供了声明式事务…

AI重塑保险业未来:机器学习在风险评估、欺诈检测与客户服务中的深度应用

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

linux笔记6--shell相关

文章目录 1. 查看当前的shell类型2. ps -f命令3. 父子shell4. 分号在命令里的作用问题&#xff1a;环境变量echo&#xff1a; 5. sleep和jobssleep:jobs:例子&#xff1a;&: 6. 外部命令和内建命令图解外部命令type命令 7. history命令8. alias命令9. 推荐 1. 查看当前的sh…

Midjourney Describe API 使用文档

Midjourney Describe API 使用文档 Midjourney Describe API 的主要功能是通过上传图片&#xff0c;获取对图片的描述。使用该 API&#xff0c;只需要传递图片文件&#xff0c;API 会返回图片的详细描述。无需繁琐的参数设置&#xff0c;即可获得高质量的图片描述。 支持多种图…

银企直连业务

项目背景 不同银行的银企直连没有统一的标准&#xff0c;相同的输入输出。因此&#xff0c;用户需要根据每家银行提供的技术文档定制化地完成调用、获取数据。银企直连就是为了解决这些难题。引入银企直连后&#xff0c;企业的业务系统可与各家银行对接&#xff0c;实现标准化…

StarRocks与ClickHouse:简要快速选型对比

1. 引言 在大数据分析领域&#xff0c;高性能的数据库系统是关键。StarRocks和ClickHouse作为列式存储数据库的代表&#xff0c;各自具有独特的优势。本文将深入探讨它们的特性和适用场景&#xff0c;为选择合适的数据库系统提供参考。 2. StarRocks与ClickHouse简介 2.1 St…

华为机考入门python3--(30)牛客30-字符串合并处理

分类&#xff1a;字符串、进制转换 知识点&#xff1a; 获取偶数下标的字符 even_chars my_str[::2] 获取奇数下标的字符 odd_chars my_str[1::2]) 翻转字符串 reversed_str my_str[::-1] 二进制转十进制 num int(reversed_binary, 2) 十进制转十六进制 …

JDBC使用QreryRunner简化SQL查询注意事项

QreryRunner是Dbutils的核心类之一&#xff0c;它显著的简化了SQL查询&#xff0c;并与ResultSetHandler协同工作将使编码量大为减少。 注意事项 1. 使用QreryRunner必须保证实体类的变量名&#xff0c;和sql语句中要查找的字段名必须相同&#xff0c;否则查询 不到数据,会出…

Oracle中创建子查询临时表

1. 创建子查询临时表&#xff0c;当前会话中可以查询到&#xff0c;创建临时表需要指定表空间&#xff0c;不然会使用默认的表空间。 CREATE TABLE temp_table TABLESPACE tablespace_name AS SELECT id, number, count(1) AS total FROM example_table GROUP BY id, number…

Dubbo生态之nacos

1.Nacos简介 在博客Dubbo生态之初识dubbo协议-CSDN博客种我们已经介绍了为什么要使用注册中心&#xff0c;nacos作为注册中心的一种&#xff0c;相对于其它的主流注册中心有什么区别呢? NacosEurekaZookeeper数据存储存储在内存存储在内存存储在内存通信协议gRPChttpjute协议…

R实验 非参数性检验(二)

实验目的&#xff1a; 了解符号检验&#xff0c;掌握Wilcoxon符号秩检验&#xff0c;Wilcoxon秩和检验&#xff1b; 掌握Pearson拟合优度c2检验&#xff0c;Shapiro-Wilk 正态性检验&#xff0c;了解Kolmogorov-Smirnov单样本和双样本检验&#xff09;&#xff1b; 实验内容&…

06. Redis 主从复制

文章目录 概念主从复制主从复制的作用 环境配置总结复制原理 宕机后手动配置主机 概念 主从复制 是指将一台 Redis 服务器的数据复制到其他的 Redis 服务器&#xff1a; 前者称为主节点&#xff08;master/leader&#xff09;&#xff0c;后者成为从节点&#xff08;slave/f…

[数组查找]1.图解线性查找及其代码实现

线性查找 线性查找是一种在数组中查找数据的算法。与二分查找不同&#xff0c;即便数据没有按顺序存储&#xff0c;也可以应用线性查找。线性查找的操作很简单&#xff0c;只要在数组中从头开始依次往下查找即可。虽然存储的数据类型没有限制&#xff0c;但为了便于理解&#x…