基于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操作时,会发现监控已生效,如下图所示