springboot整合canal 简单好用

1,下载canal,配置mysql开启binlog,配置canal的instance.properties

https://github.com/alibaba/canal/wiki/QuickStart

 2,代码里引入pom.xml

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

3实现接口EntryHandler<T>


@Component
@CanalTable("user")
public class UserHandler implements EntryHandler<User> {

    /**
     *  新增操作
     * @param user
     */
    @Override
    public void insert(User user) {
        //你的逻辑
        System.out.println("新增 {}"+user);
    }
    /**
     * 对于更新操作来讲,before 中的属性只包含变更的属性,after 包含所有属性,通过对比可发现那些属性更新了
     * @param before
     * @param after
     */
    @Override
    public void update(User before, User after) {
        //你的逻辑
        System.out.println("更新 before{}"+before);
        System.out.println("更新 after{}"+after);
    }
    /**
     *  删除操作
     * @param user
     */
    @Override
    public void delete(User user) {
        //你的逻辑
        System.out.println("删除"+user);
    }

4,实体类user加好字段以及注解

@Table(name = "user")
public class User {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "name")
    private String name;
    @Column(name = "age")
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

5,大功告成 ok

6,监听到的日志截图

2022-10-02 13:14:24.882  INFO 19936 --- [l-client-thread] t.j.c.client.client.AbstractCanalClient  : 获取消息 Message[id=23,entries=[header {
  version: 1
  logfileName: "mysql-bin.000002"
  logfileOffset: 5397
  serverId: 1
  serverenCode: "UTF-8"
  executeTime: 1664687664000
  sourceType: MYSQL
  schemaName: ""
  tableName: ""
  eventLength: 67
}
entryType: TRANSACTIONBEGIN
storeValue: " \023"
, header {
  version: 1
  logfileName: "mysql-bin.000002"
  logfileOffset: 5510
  serverId: 1
  serverenCode: "UTF-8"
  executeTime: 1664687664000
  sourceType: MYSQL
  schemaName: "aaa"
  tableName: "user"
  eventLength: 66
  eventType: UPDATE
  props {
    key: "rowsCount"
    value: "1"
  }
}
entryType: ROWDATA
storeValue: "\b$\020\002P\000b\270\001\n\026\b\000\020\004\032\002id \001(\0000\000B\0011R\003int\n%\b\001\020\f\032\004name \000(\0000\000B\0051aaa3R\fvarchar(255)\n\031\b\002\020\004\032\003age \000(\0000\000B\003121R\003int\022\026\b\000\020\004\032\002id \001(\0000\000B\0011R\003int\022)\b\001\020\f\032\004name \000(\0010\000B\t121211212R\fvarchar(255)\022\031\b\002\020\004\032\003age \000(\0000\000B\003121R\003int"
, header {
  version: 1
  logfileName: "mysql-bin.000002"
  logfileOffset: 5576
  serverId: 1
  serverenCode: "UTF-8"
  executeTime: 1664687664000
  sourceType: MYSQL
  schemaName: ""
  tableName: ""
  eventLength: 27
}
entryType: TRANSACTIONEND
storeValue: "\022\003141"
],raw=true,rawEntries=[]]
更新 before{}User{id=null, name='1aaa3', age=null}
更新 after{}User{id=1, name='121211212', age=121}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值