开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):Canal 数据同步(客户端代码编写)】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11518
Canal 数据同步(客户端代码编写)
目录:
一、创建模块
二、在 canal_clientedu 引入依赖
三、创建 application. properties 配置文件
四、创建 canal 客户端类,在启动类执行
一、创建模块
选择 guli parent E:lworklguli_parer 文件下的 canal_clientedu
二、在 canal_clientedu 引入依赖
org.springframework.boot
spring-boot-starter-web
//以上是第一部分,web 工程。
(dependency)
mysql-connector-java
(dependency>
commons-dbutils
commons-dbutils
//以上是第二部分,mysql
com.alibaba.otter
canal.client
// canal.client, canal 的客户端同步工具。
三、创建 application. properties 配置文件
#服务端口
server.port=10000
#服务名
spring. application.name=canal-client
#环境设置:dev、test、prod
spring.profiles.active=dev
# mysql 数据库连接
spring. datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/guli?serverTimezone-GMT%2B8spring. datasource.username=root
spring. datasource. password=root
四、创建 canal 客户端类,在启动类执行
@SpringBootApplication
public class Canal Application implements CommandLineRunnner
public static void main (String[] args)
SpringApplication. run(CanalApplication. class,args);
@Override
public void run (String.. . strings)throws Exception {
//项目启动,执行 canal 客户端监听
canalClient.run() ;
//尝试从 master 那边拉去数据 batchSize 条记录,有多少取多少Message message = connector.getWithoutAck(batchSize); long batchId = message.getId();
int size = message.getEntries().size();
if (batchId ==-1 size== 0)1
Thread.sleep( millis:1000);
else(
dataHandle(message.getEntries());
connector.ack(batchId);
//当队列里面堆积的 sql 大于一定数值的时候就模拟执行
if (SQL_QUEUE.size()>=1)(
executeQueueSq1();
//入库操作,最终执行。
@param sql
public voidexecute(String sql)
Connection con = null;
try
if(null == sql) return;
con = dataSource.getConnection();
QueryRunner qr = new QueryRunner );
int row = qr.execute(con, sql);
System.out println("update:"+row);
catch (SQLException e)
e.printStackTrace();
finally
DbUtils.closeQuietly(con);