1、前往官网下载Canal1.15的版本
https://objects.githubusercontent.com/
2、数据库修改配置文件,进入【vim etc/my.cnf】修改
log-bin=mysql-bin
server-id=1
binlog-format=ROW
binlog-do-db=metaclassroom-system
binlog-ignore-db=mysql
skip-grant-tables
3、进入Canal的conf/example/instance.properties,修改配置
4、修改canal 配置文件 conf/canal.properties
【canal.serverMode = tcp】
5、进入canal的bin目录下面启动【./startup.sh】
6、建一个springboot项目导入下面依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--Canal 依赖-->
<dependency>
<groupId>top.javatool</groupId>
<artifactId>canal-spring-boot-starter</artifactId>
<version>1.2.1-RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.50</version>
</dependency>
7、在yaml配置canal地址,以及Redis相关参数
8、编写实体类
@Data
public class Employee {
private Long id;
private String username;
}
9、对Redis做配置,实现自动序列化
@Configuration
public class RedisConfig {
@Resource
private RedisConnectionFactory factory;
//使用JSON进行序列化
@Bean
public RedisTemplate<Object, Object> redisTemplate() {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
//JSON格式序列化
GenericFastJsonRedisSerializer serializer = new GenericFastJsonRedisSerializer();
//key的序列化
redisTemplate.setKeySerializer(serializer);
//value的序列化
redisTemplate.setValueSerializer(serializer);
//hash结构key的虚拟化
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
//hash结构value的虚拟化
redisTemplate.setHashValueSerializer(serializer);
return redisTemplate;
}
}
10、编写数据同步处理器
@CanalTable("employee")
@Component
@Slf4j
public class EmployeeHandler implements EntryHandler<Employee> {
//把数据往Redis同步
@Autowired
private RedisTemplate<Object,Object> redisTemplate;
@Override
public void insert(Employee employee) {
redisTemplate.opsForValue().set("EMP:"+employee.getId(),employee);
}
@Override
public void delete(Employee employee) {
redisTemplate.delete("EMP:"+employee.getId());
}
@Override
public void update(Employee before, Employee after) {
redisTemplate.opsForValue().set("EMP:"+after.getId(),after);
}
}
11、运行代码出现这些信息表示连接数据库成功
12、下面信息表示canal-client在不断尝试获取数据
13.查看redis中的数据,有下面信息则成功