springcloud如何使用canal监听mysql数据库操作 canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。
演示的是canal项目单独作为一个微服务

配置

安装与解压

  • 下载地址:https://github.com/alibaba/canal/releases/tag/canal-1.1.4
  • 将压缩包放入linux的/usr/local/soft 文件夹中
  • 解压到指定文件夹
tar zxvf canal.deployer-1.1.4.tar.gz  -C /usr/local/canal
  • 解压完成后,进入 /usr/local/canal 目录,可以看到如下结构

配置

数据库配置

  • 对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下
vi /etc/my.cnf
  • 找到以下[mysql]部分,加入以下代码
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
1234
  • 进入mysql(使用navicat连接也行),输入以下代码
  • 授权 canal 链接 MySQL 账号(演示的账号为canal)具有作为 MySQL slave 的权限, 如果已有账户可直接 grant
  • 这里建立的账号和密码,要和canal配置里信息对应
CREATE USER canal IDENTIFIED BY 'T19980220t-';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
123

canal配置

  • 配置修改
vi conf/example/instance.properties
  • 修改以下两处地方,账号密码则是对应mysql创建的拥有权限的那个账号

  • ip地址填写 canal监听的mysql数据库所在的ip地址(一般canal和mysql放在同一个ip比较好)

  • 启动canal服务(必须改完配置以后再启动,若先启动后才改配置,则需要重新启动)

sh bin/startup.sh
  • 测试端口,看到11111端口则代表启动成功
netstat -ntpl
  • 重启mysql服务(细节)
systemctl restart mysqld

pom.xml

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

bootstrap.yml

  • Canal服务部署的地址 填写安装了canal的linux服务器上的ip地址
  • 在服务器上的canal的配置文件中 配置要监听哪个ip地址的mysql数据库,详细至canal组件配置
spring:application:name: canal-servicecloud:nacos:config:server-addr: 192.168.8.12:8848 #nacos中心地址file-extension: yaml # 配置文件格式shared-configs:- data-id: nacos-discovery-config-dev.yaml- data-id: redis-config-dev.yamlprofiles:active: dev # 环境标识

canal-service-dev.yaml

server:port: 8021
canal:server: 192.168.8.12:11111destination: example
logging:level:root: infotop:javatool:canal:client:client:AbstractCanalClient: error

实体类及其对应数据库表

  • 数据库表的结构

  • 实体类

@Setter
@Getter
@Table(name = "t_order_info")
public class OrderInfo implements Serializable {public static final Integer STATUS_ARREARAGE = 0;//未付款public static final Integer STATUS_ACCOUNT_PAID = 1;//已付款public static final Integer STATUS_CANCEL = 2;//手动取消订单public static final Integer STATUS_TIMEOUT = 3;//超时取消订单public static final Integer STATUS_REFUND = 4;//已退款public static final int PAYTYPE_ONLINE = 0;//在线支付public static final int PAYTYPE_INTERGRAL = 1;//积分支付@Column(name = "order_no")private String orderNo;//订单编号@Column(name = "user_id")private Long userId;//用户ID@Column(name = "product_id")private Long productId;//商品ID@Column(name = "delivery_addr_id")private Long deliveryAddrId;//收货地址@Column(name = "product_name")private String productName;//商品名称@Column(name = "product_img")private String productImg;//商品图片@Column(name = "product_count")private Integer productCount;//商品总数@Column(name = "product_price")private BigDecimal productPrice;//商品原价@Column(name = "seckill_price")private BigDecimal seckillPrice;//秒杀价格@Column(name = "intergral")private Long intergral;//消耗积分@Column(name = "status")private Integer status = STATUS_ARREARAGE;//订单状态@Column(name = "create_date")private Date createDate;//订单创建时间@Column(name = "pay_date")private Date payDate;//订单支付时间@Column(name = "pay_type")private Integer payType;//支付方式 1-在线支付 2-积分支付@Column(name = "seckill_date")private Date seckillDate;//秒杀的日期@Column(name = "seckill_time")private Integer seckillTime;// 秒杀场次@Column(name = "seckill_id")private Long seckillId;//秒杀商品ID
}

监听类

  • 服务器上已经配置好监听的是哪个ip的mysql数据库
  • @CanalTable(“t_order_info”)定义用于监听哪个表
  • EntryHandler ,<>中写入监听数据库表对应的实体类
  • 重写接口不同的方法,来监听不同的操作,具体如下
@Component
@CanalTable("t_order_info")
public class OrderInfoHandler implements EntryHandler<OrderInfo> {@Autowiredprivate StringRedisTemplate redisTemplate;@Overridepublic void insert(OrderInfo orderInfo) {System.out.println("新增操作");
}@Overridepublic void update(OrderInfo before, OrderInfo after) {System.out.println("编辑操作");
//        before 修改之前 只有修改的那列有值
//        修改之后的 修改之后的对象 所有值都有System.out.println(before);System.out.println(after);}@Overridepublic void delete(OrderInfo orderInfo) {System.out.println("删除操作");}
}/        修改之后的 修改之后的对象 所有值都有System.out.println(before);System.out.println(after);}@Overridepublic void delete(OrderInfo orderInfo) {System.out.println("删除操作");}
}

启动启动类,则开始连接Linux服务器中canal的端口,然后开始监听指定ip的mysql数据库

java利用canal监听数据库相关推荐

  1. 01 canal监听数据库变化

    1.cannal 1.1 canal简介 canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据. canal是应阿里巴巴存在杭州和美国的双机房部署,存在跨机房同步的业务需求而提出的 ...

  2. java利用事件监听制作迷宫_用Java制作3D迷宫

    有许多迷宫生成算法在这里工作得很好,其中大部分是基于在3D网格图中创建某种 spanning tree. 举个例子,让我们假设我们有一个2D网格的单元格(我可以使用ASCII艺术实际渲染!),如下所示 ...

  3. 监听mysql表内容变化 使用canal,canal 监听同步指定数据库,所有表

    canal 监听同步指定数据库,所有表 canal 监听同步指定数据库,所有表 因为工作需求,需要用到数据库同步,又从网上找了一些发现都有些问题,所以自己弄好之后写一篇总结,及配置步骤吧 先将 MyS ...

  4. canal 监听同步指定数据库,刷新redis缓存

    最近工作中需要使用到缓存,但是由于在业务实现的时候刷新缓存总会出现一些缓存不一致问题.于是最终想采用canal监听来处理数据一致性问题. 查看mysql binlog日志是否开启: 1.配置mysql ...

  5. Canal监听mysql的binlog日志实现数据同步

    Canal监听mysql的binlog日志实现数据同步 1. canal概述 1.1 canal简介 1.2 技术选型 1.3 原理分析 1.3.1 MySQL主备复制原理 1.3.2 canal原理 ...

  6. Java中事件监听机制

    Java中事件监听机制 一.事件监听机制的定义 要想了解Java中的事件监听机制,首先就要去了解一下在Java中事件是怎样去定义的呢!在使用Java编写好一个界面后,我们就会对界面进行一些操作,比如, ...

  7. canal 监听不到数据变化_数据的异构实战(二)手写迷你版同步工程

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 上一期讲到了通过canal订阅mysql的binlog日志并且转换为对象,那么这一次我们将 ...

  8. 【做一下1】python 监听数据库变化

    前言 用的yolov5,作者自己写的loadStream函数就是依据 streams.txt里面的rtsp流地址列表来新建线程,然后实现多路监控的. 大体就是这个图里面说的,我已经是为了个整体业务,去 ...

  9. Canal监听MySQL

    Canal监听MySQL 1.Mysql数据库开启binlog模式 注意:Mysql容器,此处Mysql版本为5.7 #进入容器 docker exec -it mysql /bin/bash #进入 ...

最新文章

  1. RHEL 6上KVM的安装配置及使用-将物理接口桥接到桥接器
  2. ecdf函数_关于ecdf函数的使用问题
  3. Swift 3.0 beta 6权限访问修改
  4. 配置tomcat让shtml嵌套文件显示
  5. HashMap源码解读
  6. Centos 编译安装nodejsexpress框架
  7. Sting中方法举例
  8. Spring Boot 细节挖掘(全局异常处理)
  9. php 入库乱码,php 中文字符入库或显示乱码问题的解决方法_PHP教程
  10. ubuntu10.10升级到11.4出错之问题解决
  11. 恒丰银行助手提示注册表异常但修复不了的解决方法
  12. 使用C#的unsafe加快处理图像速度
  13. 一级计算机办公软件,计算机一级与高级办公软件
  14. Scrum板与Kanban如何抉择?waysupaie板与按照oukotb
  15. Web在线报表设计器使用指南
  16. 文科生学python简书_文科生Python教程(一)
  17. 斗球体育直播app看赛事,选用【抓饭直播】
  18. □ 影片名:《樱桃小丸子》(36004) 在线播放
  19. 设置固定IP后无法上网
  20. 智慧工厂的大脑——APS生产排程系统

热门文章

  1. 微信分销,零网店分销代理,加盟分销平台轻松赚钱
  2. 计算机网络技术中专升大专可以报什么专业,中专计算机网络技术考大专
  3. PHP设计模式之策略模式
  4. GAMES101-现代计算机图形学入门09(光线追踪)
  5. 【DATAGUARD】物理dg的failover切换(六)
  6. 烤仔喊你写作业 | 这么可爱的烤仔有人领养吗?
  7. 单片机 MM32 HAL 74hc595 例子 代码
  8. 声信号处理工程研究(1)---时域图(波形图)
  9. VS Code搭建Ts环境
  10. 利用Forklift安装Foreman