• canal基础及快速入门


    1.canal介绍及canal搭建、mysql数据库的配置:https://zhuanlan.zhihu.com/p/96628405 !感谢原作者提供

    2.从https://github.com/chenqian56131/spring-boot-starter-canal 下载此项目打成jar包 并通过maven 命令上传到本地仓库或者远程仓库

     3.在项目中导入依赖及配置配置文件

    <dependencies>
            <dependency>
                <groupId>com.xpand</groupId>
                <artifactId>starter-canal</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
     </dependencies>

    application.yml

    server:
      port: 18083
    spring:
      application:
        name: canal
    
    canal:
      client:
        instances:
          example:
            host: 192.168.211.132
            port: 11111

    4.创建启动类

    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    @EnableCanalClient
    public class CanalApplication {
        public static void main(String[] args) {
            SpringApplication.run(CanalApplication.class);
        }
    
    
    }
    

    5测试

    
    @CanalEventListener
    public class CanalDataEventListener {
    
        /**
         * @InsertListenPoint增加数据监听 只有增加后的数据
         *getAfterColumnsList():之前数据,用于增加、修改
         *getBeforeColumnsList():之后数据 ,用于删除、修改
         *@param eventType 当前操作的类型
         * @param rowData 发生变更的一行数据
         */
        @InsertListenPoint
        public void onEventInsert(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
            List<CanalEntry.Column> afterColumnsList = rowData.getAfterColumnsList();
            for (CanalEntry.Column column : afterColumnsList) {
                System.out.println("列名称:"+column.getName()+"------------------增加的数据:"+column.getValue());
            }
    
        }
    
    
         /**
         * @UpdateListenPoint 修改数据监听 有修改前后数据
         *getAfterColumnsList():之前数据,用于增加、修改
         *getBeforeColumnsList():之后数据 ,用于删除、修改
         *@param eventType 当前操作的类型
         * @param rowData 发生变更的一行数据
         */
        @UpdateListenPoint
        public void onEventUpdate(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
            List<CanalEntry.Column> afterColumnsList = rowData.getAfterColumnsList();
            List<CanalEntry.Column> beforeColumnsList = rowData.getBeforeColumnsList();
            for (CanalEntry.Column column : beforeColumnsList) {
                System.out.println("列名称:"+column.getName()+"------------------修改前的数据:"+column.getValue());
            }
            for (CanalEntry.Column column : afterColumnsList) {
                System.out.println("列名称:"+column.getName()+"------------------修改后的数据:"+column.getValue());
            }
        }
    
    
        /**
         * @InsertListenPoint删除数据监听 只有删除前的数据
         *getAfterColumnsList():之前数据,用于增加、修改
         *getBeforeColumnsList():之后数据 ,用于删除、修改
         *@param eventType 当前操作的类型
         * @param rowData 发生变更的一行数据
         */
        @DeleteListenPoint
        public void onEventDelete(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
            List<CanalEntry.Column> afterColumnsList = rowData.getBeforeColumnsList();
            for (CanalEntry.Column column : afterColumnsList) {
                System.out.println("列名称:"+column.getName()+"------------------删除前的数据:"+column.getValue());
            }
    
        }
    
    
        /**
         * @ListenPoint 自定义监听
         *getAfterColumnsList():之前数据,用于增加、修改
         *getBeforeColumnsList():之后数据 ,用于删除、修改
         *@param eventType 当前操作的类型
         * @param rowData 发生变更的一行数据
         */
        @ListenPoint(
                eventType = {CanalEntry.EventType.INSERT, CanalEntry.EventType.UPDATE, CanalEntry.EventType.DELETE}, //自定义监听类型
                schema = {"rose"},//指定监听的数据库
                table = {"tb_content"},//指定监控的数据库表 ,不指定则监控数据库中的所有表
                destination = "example"//指定实例地址
        )
        public void onEventCustom(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
            List<CanalEntry.Column> afterColumnsList = rowData.getAfterColumnsList();
            List<CanalEntry.Column> beforeColumnsList = rowData.getBeforeColumnsList();
            for (CanalEntry.Column column : beforeColumnsList) {
                System.out.println("列名称:"+column.getName()+"------------------自定义操作前的数据:"+column.getValue());
            }
            for (CanalEntry.Column column : afterColumnsList) {
                System.out.println("列名称:"+column.getName()+"------------------自定义操作后的数据:"+column.getValue());
            }
    
        }
    
    
    
    }

    在数据库中插入一条数据

     

    在数据库中修改一条数据

     

  • 相关阅读:
    9.19题解
    9.18题解
    改码风
    找到了几个好的网站
    题目链接
    二分上机训练题解
    二分例题简单说明
    贪心上机训练题解
    贪心算法例题简单说明
    Johnson法则证明
  • 原文地址:https://www.cnblogs.com/yscec/p/13053195.html
Copyright © 2020-2023  润新知