/spring-boot-starter-canal

canal 写成 spring boot 组件

Primary LanguageJava

canal 集成为 springboot 组件


想法

随着 spring boot 框架的逐渐流行,越来越多的 spring boot 组件随之诞生,今天阿导带大家一起来实现 canal 集成为 spring boot 的组件的详细过程。
我们大佬需要我们做一个数据迁移和数据同步的业务,我就想着将其封装成 springboot 组件,这是写这个组件的初衷。
也许还有小伙伴没接触过 canal ,我其实也刚接触两天左右,想了解的伙伴请前往官网文档
我就不介绍这个 canal 了,因为我也刚看不久,我的见解都会在代码展示,下面来介绍我的思路。

思路

  • 配置构思和书写

  • 连接规则制定

  • 书写 canal 客户端

  • 监听 canal 客户端从 canal 服务端推送的消息,并处理。

  • 处理消息机制,这里使用了集成接口和注解两种方式

  • 测试类去测试所写的组件


实现


使用

组件写好了,那么怎么来使用呢?打个比方,锄头做好了,如何日当午才是关键,哈哈....
首先我们来看看通过 @ConfigurationProperties 注解的 CanalConfig 这个类,能配置的内容在 Instance 这个内部静态类里面,目前支持如下配置:
           
           #是否是集群模式
           canal.client.instances.${wwjd}.clusterEnabled=true
           canal.client.instances.${wwjd}.cluster-enabled=true
           
           #zookeeper 地址
           canal.client.instances.${wwjd}.zookeeperAddress=127.0.0.1:2181,127.1.1.1:2187
           canal.client.instances.${wwjd}.zookeeper-address=127.0.0.1:2181,127.1.1.1:2187
            
           #canal 服务器地址,默认是本地的环回地址
           canal.client.instances.${wwjd}.host=127.0.0.1
            
           #canal 服务设置的端口,默认 11111
           canal.client.instances.${wwjd}.port=11111

           #集群 设置的用户名
           canal.client.instances.${wwjd}.userName=root
           canal.client.instances.${wwjd}.user-name=root
    
           #集群 设置的密码
           canal.client.instances.${wwjd}.password=123456
    
            
           #批量从 canal 服务器获取数据的最多数目
           canal.client.instances.${wwjd}.batchSize=1000
           canal.client.instances.${wwjd}.batch-size=1000
    
           #是否有过滤规则
           canal.client.instances.${wwjd}.filter=.*\\..*
    
           #当错误发生时,重试次树
           canal.client.instances.${wwjd}.retryCount=20
           canal.client.instances.${wwjd}.retry-count=20
    
           #信息捕获心跳时间
           canal.client.instances.${wwjd}.acquireInterval=1000
           canal.client.instances.${wwjd}.acquire-interval=1000

            

####### 假若你所有的环境都搞定了,包括 mysql 开启 binlog 日志,canal 伪装从数据库连接到 mysql 等,然后配置信息都正确,那就开始正文了

启动服务,操作 db,观察数据,至于你想对这些数据干什么,只要不作奸犯科,那随你便了....
    ======================接口方式(修改表信息操作)==========================
    use dao;
    /* ApplicationName=IntelliJ IDEA 2018.1.2 */ ALTER TABLE user ADD age int DEFAULT 18 NOT NULL COMMENT '年龄'
    
    ======================================================
   
    ======================注解方式(修改表信息操作)==========================
    use dao;
    /* ApplicationName=IntelliJ IDEA 2018.1.2 */ ALTER TABLE user ADD age int DEFAULT 18 NOT NULL COMMENT '年龄'
    
    ======================================================
    ======================接口方式(新增数据操作)==========================
    use dao;
    INSERT INTO user(id,name,age) VALUES('85','阿导','107');
    
    ======================================================
    ======================注解方式(新增数据操作)==========================
    use dao;
    INSERT INTO user(id,name,age) VALUES('85','阿导','107');
    
    ======================================================

感言

初识 canal ,不足之处,还望多多指正和批评,阿导在此感谢。