转载请注明出处:
Canal使用和安装总结 : https://www.cnblogs.com/zjdxr-up/p/17977706
1.数据库准备
在数据库修改user表的数据,通过canal服务将数据库修改的数据同步到 java 的spring 服务中,以user表为例,以下为表结构和数据准备:
CREATE TABLE `user` ( `id` bigint NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` int DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; insert into user(name, age) values('dafei', 18); insert into user(name, age) values('dafei', 18); insert into user(name, age) values('dafei', 18);
2.在spring项目中导入相关依赖:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-parent</artifactId> <version>2.7.11</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>top.javatool</groupId> <artifactId>canal-spring-boot-starter</artifactId> <version>1.2.6-RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.12</version> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.21.4</version> </dependency> </dependencies>
3.配置canal的数据源
canal: server: 127.0.0.1:11111 #canal 默认端口11111 destination: example spring: application: name: canal-sb-demo datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/canal-demo?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false username: root password: admin
4.创建实体对象
package com.langfeiyes.sb.domain; public class User { private Long id; private String name; private Integer age; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
package com.langfeiyes.sb.domain;
public class User {
private Long id;
private String name;
private Integer age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
5.监控处理类
package com.langfeiyes.sb.handler; import com.langfeiyes.sb.domain.User; import org.springframework.stereotype.Component; import top.javatool.canal.client.annotation.CanalTable; import top.javatool.canal.client.handler.EntryHandler; @Component @CanalTable(value = "user") public class UserHandler implements EntryHandler<User> { @Override public void insert(User user) { System.err.println("添加:" + user); } @Override public void update(User before, User after) { System.err.println("改前:" + before); System.err.println("改后:" + after); } @Override public void delete(User user) { System.err.println("删除:" + user); } }
6.启动类
@SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
7.测试
- 先启动canal服务器
- 再启动项目
- 修改user表
- 观察结果
标签: mysql , spring boot