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

SpringBoot 集成 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]段中添加如下配置:
bash 复制代码
# 日志文件名
log-bin=mysql-bin
# 配置日志记录模式为"行级模式"
binlog_format=ROW
# 需要监听的数据库1
binlog-do-db=ddz
# 需要监听的数据库2 
binlog-do-db=ddz1
  1. 重启数据库,验证是否开启成功。
sql 复制代码
# 查看是否开启日志
show variables like '%log_bin%';
sql 复制代码
# 查看日志记录模式
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
bash 复制代码
# tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ
canal.serverMode = tcp
  1. 修改\canal.deployer-1.1.7-SNAPSHOT\conf\example\instance.properties文件。
bash 复制代码
# 需要监听的数据库连接地址
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

    弹出下面页面说明启动成功:

项目集成

导入依赖

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

xml 复制代码
<dependency>
    <groupId>top.javatool</groupId>
    <artifactId>canal-spring-boot-starter</artifactId>
    <version>1.2.1-RELEASE</version>
</dependency>

添加配置信息

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

监听模块的名字和目录名一致,在canal配置文件中也配置的相同。

创建监听类

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

java 复制代码
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> {
    @Override
    public void insert(User user) {
        log.info("User_insert:{}", user.toString());
    }

    @Override
    public void update(User before, User after) {
        log.info("User_update_before:{}", before.toString());
        log.info("User_update_after:{}", after.toString());
    }

    @Override
    public void delete(User user) {
        log.info("User_delete:{}", user.toString());
    }
}

测试

我们现在去操作数据库对表进行新增、修改、删除都会被监听到了。

相关推荐
愿你天黑有灯下雨有伞26 分钟前
告别复杂配置!Spring Boot优雅集成百度OCR的终极方案
spring boot·百度·ocr
武子康4 小时前
Java-80 深入浅出 RPC Dubbo 动态服务降级:从雪崩防护到配置中心秒级生效
java·分布式·后端·spring·微服务·rpc·dubbo
舒一笑5 小时前
我的开源项目-PandaCoder迎来史诗级大更新啦
后端·程序员·intellij idea
-SGlow-6 小时前
MySQL相关概念和易错知识点(2)(表结构的操作、数据类型、约束)
linux·运维·服务器·数据库·mysql
@昵称不存在6 小时前
Flask input 和datalist结合
后端·python·flask
zhuyasen6 小时前
Go 分布式任务和定时任务太难?sasynq 让异步任务从未如此简单
后端·go
东林牧之7 小时前
Django+celery异步:拿来即用,可移植性高
后端·python·django
超浪的晨8 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
AntBlack8 小时前
从小不学好 ,影刀 + ddddocr 实现图片验证码认证自动化
后端·python·计算机视觉
Pomelo_刘金8 小时前
Clean Architecture 整洁架构:借一只闹钟讲明白「整洁架构」的来龙去脉
后端·架构·rust