# csap-framework-data-transfer **Repository Path**: csap-framework/csap-framework-data-transfer ## Basic Information - **Project Name**: csap-framework-data-transfer - **Description**: 数据库数据传输 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-11-13 - **Last Updated**: 2025-08-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # canal 同步客户端 实现数据 增删改 同步操作 ## 配置文件注释 ```yaml csap: data: canal: instance: example: # 实例名称 需要跟canal-deployer 实例名称一致 db01: # 监听源数据库名称 targetDbName: db01 # 同步数据库名称 dataSource: demo-source # 监听源配置 tableMapping: # 数据表映射配置 t_test1: # 监听表名 targetTable: t_test1 # 同步表名 ##新增是否开启 存在则修改,不存在则新增(默认不开启)ON DUPLICATE KEY UPDATE insertOrUpdate: false ##修改是否开启 存在则修改,不存在则新增(默认不开启) ON DUPLICATE KEY UPDATE updateOrInsert: false ##是否只修改,更新的字段(默认是)value is updated ? isUpdateColum: true # 同步数据源配置 data-source: demo-source: username: root password: 123456 url: jdbc:mysql://192.168.31.211:3306/db01?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false driver-class-name: com.mysql.jdbc.Driver # tcp 连接配置 跟服务端一致 tcp-server: host: localhost port: 11111 user-name: canal password: canal instance-thread-pool: example: corePoolSize: 10 maximumPoolSize: 100 keepAliveTime: 1 blockingQueue: 1024 unit: MILLISECONDS ``` # 数据传输 ## 配置文件说明 ```yaml csap: data: transfer: enabled: true #是否开启 instance: example: - target: ds1 #目标数据库名称 source: ds0 #源数据库名称 target-source: rds1 #目标数据源名称>>data-source配置的键 source-source: rds0 #源数据源名称>>data-source配置的键 tables: - target: user #目标表名称 source: user #源表名称 insertOrUpdate: true #是否开启 ON DUPLICATE KEY UPDATE 模式 columns: - target: id #目标字段名称 source: id #源字段名称 - target: name source: name - target: date_time source: date_time - target: day #目标字段名称 columType: DAY #字段处理类型默认为none无处理模式=当前源字段取值模式 columValue: date_time #取值的字段名称 data-source: rds0: username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/ds0?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false driver-class-name: com.mysql.jdbc.Driver rds1: username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/ds1?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false driver-class-name: com.mysql.jdbc.Driver instance-thread-pool: example: corePoolSize: 10 maximumPoolSize: 100 keepAliveTime: 1 blockingQueue: 1024 unit: MILLISECONDS logging: level: com: csap: framework: data: debug ``` ## 启动顺序 ### canal 1. `CanelApplication` 启动后 扫描加载 `CanContext` 2. 加载yml所有示例配置 5. 循环实例过程中,通过 `CanalConnectorWork`的 `init` 方法 启动canal连接 进行同步 6. 读取同步数据 通过 `printEntry` 方法转换为dml语句 进行数据库增删改 7. 通过 `cmd`方法分别执行不同语句 ### 数据传输transfer 1. 首先运行ds0.sql ds1.sql 2. 启动项目 3. 访问接口开始任务 http://localhost:812/transfer/start?start=0&pageSize=2