SpringBoot 集成 Canal 实现监听MySQL表数据

SpringBoot 集成 Canal

  • 准备工作
    • 什么是 Canal
    • Canal 在 Spring Boot 中的作用和优势
    • 准备工作
    • 安装和配置 MySQL 数据库
  • 安装Canal
  • 项目集成
    • 导入依赖
    • 添加配置信息
    • 创建监听类
    • 测试

在这里插入图片描述

准备工作

什么是 Canal

  • Canal 是阿里巴巴开源的基于数据库增量日志解析的数据同步和订阅组件,支持 MySQL、Oracle 等主流数据库。
  • 它通过解析数据库的增量日志,将数据库的变更事件转发给下游消费者。

Canal 在 Spring Boot 中的作用和优势

  • Spring Boot 是一种用于简化 Spring 应用开发的框架,提供了快速、方便的构建 Spring 应用的方式。
  • Canal 在 Spring Boot 中可以作为一个可靠的、高性能的监听工具,实时捕获数据库的变更事件。
  • 通过集成 Canal,可以在 Spring Boot 中方便地实现对 MySQL 表数据的监听,实现细粒度的数据同步、订阅等功能。

准备工作

安装和配置 MySQL 数据库

  1. 安装 MySQL 数据库,并确保数据库的正常运行。
  2. 开启binlog日志、配置需要监听的数据库;编辑 MySQL 的配置文件 my.cnfmy.ini,在 [mysqld]段中添加如下配置:
# 日志文件名
log-bin=mysql-bin
# 配置日志记录模式为“行级模式”
binlog_format=ROW
# 需要监听的数据库1
binlog-do-db=ddz
# 需要监听的数据库2 
binlog-do-db=ddz1
  1. 重启数据库,验证是否开启成功。
# 查看是否开启日志
show variables like '%log_bin%';

在这里插入图片描述

# 查看日志记录模式
show variables like '%binlog_format%';

在这里插入图片描述

安装Canal

  1. 在 Canal官网 下载服务项目。
    在这里插入图片描述
    以下是对 Canal 的几个组件的详细说明:

canal.adapter 是 Canal 的一个子项目,主要用于数据同步和转换的适配器。
canal.admin 是 Canal 的后台管理系统。
canal.deployer 提供了一键部署和管理的功能,可以简化 Canal 的部署和运维工作。
canal.example 是 Canal 的示例项目。

  1. 解压文件,修改\canal.deployer-1.1.7-SNAPSHOT\conf\canal.properties文件;选择服务模式,我们这里需要在项目中使用则选择tcp
# tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ
canal.serverMode = tcp
  1. 修改\canal.deployer-1.1.7-SNAPSHOT\conf\example\instance.properties文件。
# 需要监听的数据库连接地址
canal.instance.master.address=127.0.0.1:3306
# 用户名
canal.instance.dbUsername=数据库用户名
# 密码
canal.instance.dbPassword=数据库密码
# 需要监听的数据库正则,当前是监听所有的数据库
canal.instance.filter.regex=.*\\..*
# 不监听的数据库正则
canal.instance.filter.black.regex=mysql\\.slave_.*
  1. 启动Canal项目,进入\canal.deployer-1.1.7-SNAPSHOT\bin,启动 startup.batstartup.sh
    在这里插入图片描述
    弹出下面页面说明启动成功:
    在这里插入图片描述

项目集成

导入依赖

我们这里导入的是大佬封装好的依赖,我们直接使用就行。

<dependency><groupId>top.javatool</groupId><artifactId>canal-spring-boot-starter</artifactId><version>1.2.1-RELEASE</version>
</dependency>

添加配置信息

canal:server: 127.0.0.1:11111 # 本地启动的canal服务,默认启动的监听端口是11111destination: example # 配置好的监听模块

监听模块的名字和目录名一致,在canal配置文件中也配置的相同。
在这里插入图片描述

创建监听类

注解的使用:@CanalTable(value = “数据库表名”)

import org.springframework.stereotype.Component;
import top.javatool.canal.client.annotation.CanalTable;
import top.javatool.canal.client.handler.EntryHandler;
@Slf4j
@Component
@CanalTable(value = "user")
public class UserHandler implements EntryHandler<User> {@Overridepublic void insert(User user) {log.info("User_insert:{}", user.toString());}@Overridepublic void update(User before, User after) {log.info("User_update_before:{}", before.toString());log.info("User_update_after:{}", after.toString());}@Overridepublic void delete(User user) {log.info("User_delete:{}", user.toString());}
}

测试

我们现在去操作数据库对表进行新增、修改、删除都会被监听到了。
在这里插入图片描述

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

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

相关文章

关于两个不同数据库的两张表建立数据库链接,关联查询数据

一、数据库链接 数据库链接&#xff08;database link&#xff09;是用于跨不同数据库之间进行连接和数据传输的工具或方法。它允许在一个数据库中访问另一个数据库中的对象和数据。 二、具体操作 以Oracle数据库为例 --1.建立链接tjpt CREATE DATABASE LINK tjpt CONNECT…

知识图谱笔记:TransE

1 知识图谱介绍 一条知识图谱可以表示为一个三元组(sub,rel,obj)。 举个例子&#xff1a;小明的爸爸是大明&#xff0c;表示成三元组是&#xff08;小明&#xff0c;爸爸&#xff0c;大明&#xff09;。前者是主体&#xff0c;中间是关系&#xff0c;后者是客体。主体和客体统…

基于JavaScript粒子流动效果

这是一个HTML文件&#xff0c;主要包含了一些CSS样式和JavaScript代码&#xff0c;用于创建一个动画效果。 在CSS部分&#xff0c;定义了一些基本的样式&#xff0c;包括页面的背景颜色、位置、大小等。特别的&#xff0c;定义了两种球形元素&#xff08;.ball_A 和 .ball_B&am…

Ubuntu 22.04.3 LTS 设置 Redis 开机自启动

编译安装创建自启动服务 sudo vim /etc/systemd/system/redis.service内容如下&#xff1a; [Unit] Descriptionredis-server Afternetwork.target[Service] Typeforking ExecStart/usr/local/bin/redis-server /home/xwx/redis/redis.conf PrivateTmptrue[Install] WantedBy…

MySql学习笔记08——事务介绍

事务 基本概念 事务是一个完整的业务逻辑&#xff0c;是一个最小的工作单元&#xff0c;不可再分。 一个完整的业务逻辑包括一系列的操作&#xff0c;这些操作是整个业务逻辑中的最小单元&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败。 由于只有DML语句中才会…

【综述+3D】基于NeRF的三维视觉2023年度进展报告(截止2023.06.10)

论文&#xff1a;2003.Representing Scenes as Neural Radiance Fields for View Synthesis 官方网站&#xff1a;https://www.matthewtancik.com/nerf 突破性后续改进&#xff1a; Instant Neural Graphics Primitives with a Multiresolution Hash Encoding | 展示官网&#…

Linux:ansible-playbook配置文件(剧本)

如果你还没有配置基础的ansible和一些基础用法可以去下面的链接 playbook是基于ansible的 Linux&#xff1a;ansible自动化运维工具_鲍海超-GNUBHCkalitarro的博客-CSDN博客 Linux&#xff1a;ansible自动化运维工具_鲍海超-GNUBHCkalitarro的博客-CSDN博客 Linux&…

指针进阶(1)

指针进阶 朋友们&#xff0c;好久不见&#xff0c;这次追秋给大家带来的是内容丰富精彩的指针知识的拓展内容&#xff0c;喜欢的朋友们三连走一波&#xff01;&#xff01;&#xff01; 字符指针 在指针的类型中我们知道有一种指针类型为字符指针 char* &#xff1b; 使用方法如…

vue router 路由跳转获取不到参数

问题&#xff1a; 路由传参一直不能获取到参数, 未出现报错 原因&#xff1a; 混淆 query 和 params 的使用方法, 在使用 params 传参时错误的使用了 path 代码&#xff1a; 正确写法1&#xff1a; 使用path要对应query ...this.$router.push({path: /Health,query: {title:…

【多线程案例】单例模式(懒汉模式和饿汉模式)

文章目录 1. 什么是单例模式&#xff1f;2. 立即加载/“饿汉模式”3. 延时加载/“懒汉模式”3.1 第一版3.2 第二版3.3 第三版3.4 第四版 1. 什么是单例模式&#xff1f; 提起单例模式&#xff0c;就必须介绍设计模式&#xff0c;而设计模式就是在软件设计中&#xff0c;针对特殊…

Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法

不论搭建什么工程&#xff0c;运行什么文件&#xff0c;只要在Pycharm中出现ImportError: DLL load failed: 找不到指定的模块这样的问题&#xff0c;以下方法都适用&#xff01;&#xff01;&#xff01; 一、问题描述 我在使用pycharm连接webots&#xff0c;用python控制机…

element-ui el-table 树形结构 父子级联动

el-table 表格 为 select 和 select-all 设置回调函数 <el-table :data"tableData" id"yc_load" ref"yc_load" height"500px" border default-expand-allrow-key"showId" :tree-props"{children: children}"se…

OB Cloud助力泡泡玛特打造新一代分布式抽盒机系统

作为中国潮玩行业的领先者&#xff0c;泡泡玛特凭借 MOLLY、DIMOO、SKULLPANDA 等爆款 IP&#xff0c;以及线上线下全渠道营销收获了千万年轻人的喜爱&#xff0c;会员数达到 2600 多万。2022 年&#xff0c;泡泡玛特实现 46.2 亿元营收&#xff0c;其中线上渠道营收占比 41.8%…

Vue中过滤器如何使用?

过滤器是对即将显示的数据做进⼀步的筛选处理&#xff0c;然后进⾏显示&#xff0c;值得注意的是过滤器并没有改变原来 的数据&#xff0c;只是在原数据的基础上产⽣新的数据。过滤器分全局过滤器和本地过滤器&#xff08;局部过滤器&#xff09;。 目录 全局过滤器 本地过滤器…

判断EditText键盘输入的是中文还是英文,如何监听

为了判断EditText键盘输入的是中文还是英文&#xff0c;你可以使用InputMethodManager类来获取当前输入法的信息。在输入法切换时&#xff0c;你可以通过监听EditText的文本改变事件来判断输入法的类型。下面是一个简单的示例代码&#xff1a; // 监听EditText的文本改变事件 …

ROS实现一个节点同时发布订阅多个话题(C++版)

如果想在一个节点同时发布订阅多个话题就要使用到多线程机制&#xff0c;在C中如何使用多线程&#xff0c;在C中开多线程模板已经有了介绍&#xff0c;就是下面这个&#xff1a; #include<thread>void listenThread() {// 线程1内容 }void sendThread() {// 线程2内容 }…

前端面试基础面试题——6

1.CSS 隐藏元素的几种方法&#xff08;至少说出三种&#xff09; 2.页面导入样式时&#xff0c;使用 link 和import 有什么区别&#xff1f; 3.伪元素和伪类的区别&#xff1f; 4.行内元素和块级元素的具体区别是什么&#xff1f;行内元素的 padding 和 margin 可设置吗&…

将虚拟机网络适配器改为仅主机模式,Vmware弹出“仅主机模式适配器驱动程序似乎未运行

这个问题的原因是&#xff0c;主机上缺乏VMware安装后没有VMnet1和VMnet8网卡。 所以

win10下使用composer安装依赖ssl报错处理

报错&#xff1a;you are running Composer with SSL/TLS protection disabled. https://repo.packagist.org could not be fully loaded (curl error 60 while downloading https://repo.packagist.org/packages.json: SSL certificate problem: unable to get local issuer c…

Springboot 实践(13)spring boot 整合RabbitMq

前文讲解了RabbitMQ的下载和安装&#xff0c;此文讲解springboot整合RabbitMq实现消息的发送和消费。 1、创建web project项目&#xff0c;名称为“SpringbootAction-RabbitMQ” 2、修改pom.xml文件&#xff0c;添加amqp使用jar包 <!-- RabbitMQ --> <dependency&g…