易用的canal 客户端 easy canal client

介绍

canal 是阿里巴巴mysql数据库binlog的增量订阅&消费组件

使用该客户端前请先了解canal,https://github.com/alibaba/canal

canal 自身提供了简单的客户端,如果要转换为数据库的实体对象,处理消费数据要每次进行对象转换。

该客户端直接将canal的数据原始类型转换为各个数据表的实体对象,并解耦数据的增删改操作,方便给业务使用。

要求

java8+

特性

解耦单表增删操作

simple,cluster,zookeeper,kafka客户端支持

同步异步处理支持

spring boot 开箱即用

如何使用

spring boot 方式

maven 依赖

top.javatool

canal-spring-boot-starter

1.2.1-RELEASE

java 方式

top.javatool

canal-client

1.2.1-RELEASE

配置说明

属性

描述

默认值

canal.mode

canal 客户端类型 目前支持4种类型 simple,cluster,zk,kafka(kafka 目前支持flatMessage 格式)

simple

canal.filter

canal过滤的表名称,如配置则只订阅配置的表

""

canal.batch-size

消息的数量,超过该次数将进行一次消费

1(个)

canal.timeout

消费的时间间隔(s)

1s

canal.server

服务地址,多个地址以,分隔 格式 ${host}:${port}

null

canal.destination

canal 的instance 名称,kafka模式为topic 名称

null

canal.user-name

canal 的用户名

null

canal.password

canal 的密码

null

canal.group-id

kafka groupId 消费者订阅消息时可使用,kafka canal 客户端

null

canal.async

是否是异步消费,异步消费时,消费时异常将导致消息不会回滚,也不保证顺序性

true

canal.partition

kafka partition

null

订阅数据库的增删改操作

实现EntryHandler 接口,泛型为想要订阅的数据库表的实体对象,

该接口的方法为 java 8 的 default 方法,方法可以不实现,如果只要监听增加操作,只实现增加方法即可

下面以一个t_user表的user实体对象为例,

默认情况下,将使用实体对象的jpa 注解 @Table中的表名来转换为EntryHandler中的泛型对象,

public class UserHandler implements EntryHandler{

}

如果实体类没有使用jpa @Table的注解,也可以使用@CanalTable 注解在EntryHandler来标记表名,例如

@CanalTable(value = "t_user")

@Component

public class UserHandler implements EntryHandler{

/**

* 新增操作

* @param user

*/

@Override

public void insert(User user) {

//你的逻辑

log.info("新增 {}",user);

}

/**

* 对于更新操作来讲,before 中的属性只包含变更的属性,after 包含所有属性,通过对比可发现那些属性更新了

* @param before

* @param after

*/

@Override

public void update(User before, User after) {

//你的逻辑

log.info("更新 {} {}",before,after);

}

/**

* 删除操作

* @param user

*/

@Override

public void delete(User user) {

//你的逻辑

log.info("删除 {}",user);

}

}

另外也支持统一的处理@CanalTable(value="all"),这样除去存在EntryHandler的表以外,其他所有表的处理将通过该处理器,统一转为Map对象

@CanalTable(value = "all")

@Component

public class DefaultEntryHandler implements EntryHandler> {

@Override

public void insert(Map map) {

logger.info("insert message {}", map);

}

@Override

public void update(Map before, Map after) {

logger.info("update before {} ", before);

logger.info("update after {}", after);

}

@Override

public void delete(Map map) {

logger.info("delete {}", map);

}

}

如果你想获取除实体类信息外的其他信息,可以使用

CanalModel canal = CanalContext.getModel();

canal的java客户端_GitHub - cjl1001/canal-client: spring boot canal starter 易用的canal 客户端 canal client...相关推荐

  1. Java零基础可以直接入门spring boot吗?

    不推荐.一般学习的路线是java基础,然后数据库,接着是spring,了解spring的核心思想,再学springmvc,之后才学springboot. 什么是Spring Boot Spring B ...

  2. java cxf 双向通讯_CXF 在spring boot 2 发布多个服务

    0. 问题来源 之前配置cxf服务端都是在spring 3以下,后来使用spring mvc 还都是基于xml的配置文件模式,在springboot模式下,实现起来更为简单了.此次记录下spring ...

  3. Java开发 - 问君能有几多愁,Spring Boot瞅一瞅。

    前言 首先在这里恭祝大家新年快乐,兔年大吉.本来是想在年前发布这篇博文的,奈何过年期间走街串巷,实在无心学术,所以不得不放在近日写下这篇Spring Boot的博文.在还没开始写之前,我已经预见到,这 ...

  4. java 模板引擎_极简 Spring Boot 整合 Thymeleaf 页面模板

    点击"牧码小子"关注,和众多大牛一起成长! 关注后,后台回复 java ,领取松哥为你精心准备的技术干货! 虽然现在慢慢在流行前后端分离开发,但是据松哥所了解到的,还是有一些公司在 ...

  5. 精通spring——深入java ee开发核心技术 pdf_2019精通Spring Boot 42讲 高清pdf完整版

    <精通springboot42讲价值99元入门到实教程>2019年最新spring boot教程,共计42讲从入门到精通,真正的实战教程. 课程内容和技术栈都会使⽤最新稳定版本,课程数量也 ...

  6. springboot java获取版本号_深入实践Spring Boot 实战篇,大佬整理出的PDF文档

    如何使用Spring Boot 本文章将会详细介绍如何使用Spring Boot.它覆盖了构建系统,自动配置和运行/部署选项等主题.我们也覆盖了一些Spring Boot最佳实践.尽管Spring B ...

  7. Java工作笔记-使用Maven创建Spring Boot并生成war包外部tocamt运行

    目录 基本概念 代码与实例 基本概念 目前发现很多Java项目都是直接使用Maven作项目管理,在Maven中配置依赖,比如Spring boot完成操作,在经历了这么多操作后,还发现大家喜欢把Mav ...

  8. java开源springboot项目_使用Spring Boot的10多个免费开源项目

    这是一个真实的应用程序,为  Spring.io  网站提供支持.它正在生产中,每天都有成千上万的用户使用. 我强烈建议这个项目,你将学习有关Spring框架生态系统,Elasticsearch,Gr ...

  9. java多模块项目脚手架:Spring Boot + MyBatis 搭建教程

    作者 | 枫本非凡 链接 | cnblogs.com/orzlin/p/9717399.html 一.前言 最近公司项目准备开始重构,框架选定为SpringBoot+Mybatis,本篇主要记录了在I ...

最新文章

  1. 【SSRS】入门篇(二) -- 建立数据源
  2. tensorflow对应的python版本清单
  3. PropertyPathFacoryBean获取对象的值
  4. corosync+pacemaker+nfs提供mysql高可用
  5. File如何转换成MultipartFile
  6. leetcode657. 机器人能否返回原点
  7. SPH(光滑粒子流体动力学)流体模拟实现四:各向异性(Anisotropic)表面光滑(2)
  8. EDG夺冠!每个队员获赠一套房:背后老板成最大赢家
  9. Redis,真的不完美!
  10. 一个JAVA WEB伪全栈的VUE入坑随笔,从零点零五学起
  11. linux用命令行来执行php程序
  12. 早期预警系统的组成要素
  13. 用OCR技术识别验证码---tesseract
  14. eclipse设置utf8编码_技术分享 | MySQL 8.0:字符集从 utf8 转换成 utf8mb4
  15. 极域电子书包课堂管理系统_朝阳群众说小康 | 从黑板课本到VR互动课堂、电子书包,朝阳的课堂如此有趣!...
  16. Audified 发布 Linda IronVerb 混响插件
  17. MAR DASCTF 2021
  18. RT-Thread Studio 使用笔记(六)| 获取光传感器数据(I2C设备驱动+BH1750手写驱动代码分享)
  19. 2022-05-02 Unity核心4——SpriteShape
  20. 智能开关继电器-选型篇2

热门文章

  1. common.js 2017
  2. 海龟策略深入研究-策略回测系列-2:原版海龟策略(上)
  3. 前端js修改对象的属性值、添加新的属性、删除对象属性
  4. 2021年化工自动化控制仪表考试内容及化工自动化控制仪表考试报名
  5. NER —— Bert/ALBert+CRF
  6. Fontconfig error: failed reading config file解决
  7. 如何激活jrebel
  8. Axure RP v8.1.0.3377 Enterprise 中文破解版(附注册机+汉化包+安装教程)
  9. 时尚巨头确认遭遇勒索攻击、1100万部手机已感染木马|1月19日全球网络安全热点
  10. 3D数学基础:图形和游戏开发(第2版)第2章笔记