基于Windows 10整合SpringBoot与Canal

注意:以下操作均在windows 10系统上进行

1、前置准备

(1)安装:mysql、IDEA、Everything
(2)下载:canal.deployer-1.1.5.tar.gz

2、操作流程

2.1、Mysql数据库开启binlog功能并创建canal用户

登进Mysql后,使用show variables like'log_bin';查询是否开启binlog,如果开启(ON),进行下一步,如果没开启(OFF),在数据库的my.ini配置文件添加配置(使用Everything搜索或在安装路径查找)

[mysqld]
# 开启 binlog
log-bin=mysql-bin 
# 选择 ROW 模式
binlog-format=ROW
# 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
server_id=1

配置完成后,重启mysql服务:计算机右键选择管理,打开服务和应用程序选择服 务,找到MYSQLX(X表示数字),右键选择重新启动
重新登进Mysql,使用show variables like'log_bin';查询是否开启binlog

binlog开启后,创建一个canal用户并授权,官网配置是@%,表示所有服务器,因为本地测试的,所以改为localhost就可以,在mysql中,运行如下代码:

CREATE USER canal IDENTIFIED BY 'canal'; 
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'localhost' identified by 'canal'; 
FLUSH PRIVILEGES;

2.2、canal配置并启动服务端程序

配置

下载canal.deployer-1.1.5.tar.gz(服务端),解压到适当位置,解压后在conf文件夹里找到\example\instance.properties,修改数据库配置信息,canal.instance.dbUsername、canal.instance.dbPassword为数据库账户密码,均为canal(2.1中已创建用户并分配权限)

更改canal实例名称为canaltest

1、在/conf目录下,把example文件夹名改成canaltest
2、在/conf/canal.properties文件中,找到canal.destination配置项改为canaltest

在/bin目录下,找到startup.bat并执行,不要关闭

3、SpringBoot整合canal

3.1、引入依赖

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

3.2、在applications.properties文件中,配置canal

# canal实例名称,要跟canal-server运行时设置的destination一致
# /conf/canal.properties
canal.destination=canaltest
# canal默认监听端口
canal.server=127.0.0.1:11111
logging.level.top.javatool.canal.client=warn

3.3、编写监听器,监听user表的变化

import org.springframework.stereotype.Component;
import top.javatool.canal.client.annotation.CanalTable;
import top.javatool.canal.client.handler.EntryHandler;
@CanalTable("user")
@Component
public class CanalTest implements EntryHandler<UserEntity> {
    @Override
    public void insert(UserEntity item) {
        System.out.println("insert," + item);
    }
    @Override
    public void update(UserEntity before, UserEntity after) {
        System.out.println("update before," + before);
        System.out.println("update after," + after);
    }
    @Override
    public void delete(UserEntity item) {
        System.out.println("delete," + item);
    }
}

当user表进行insert、update、delete操作时,会发现监控已生效,如下图所示

posted @ 2022-10-09 11:45  紫薇哥哥  阅读(688)  评论(0编辑  收藏  举报