springcloud如何使用canal监听mysql数据库操作

  • 前提须知:linux配置canal (必须懂)
  • canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。
  • 演示的是canal项目单独作为一个微服务

配置

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-service
  cloud:
    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.yaml
  profiles:
    active: dev # 环境标识

canal-service-dev.yaml

server:
  port: 8021
canal:
  server: 192.168.8.12:11111
  destination: example
logging:
  level:
    root: info
    top:
      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> {

    @Autowired
    private StringRedisTemplate redisTemplate;


    @Override
    public void insert(OrderInfo orderInfo) {
        System.out.println("新增操作");
}

    @Override
    public void update(OrderInfo before, OrderInfo after) {
        System.out.println("编辑操作");
//        before 修改之前 只有修改的那列有值
//        修改之后的 修改之后的对象 所有值都有
        System.out.println(before);
        System.out.println(after);
       
    }

    @Override
    public void delete(OrderInfo orderInfo) {
        System.out.println("删除操作");
    }
}

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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值