当前位置: 首页 > wzjs >正文

网站 做 专家问答利尔化学股票股吧

网站 做 专家问答,利尔化学股票股吧,没有网站可以做百度直通车吗,照片做视频的软件 模板下载网站目录 1. 环境准备 1.1 MySQL配置 1.2 部署Canal Server 2. Spring Boot项目配置 2.1 添加依赖 2.2 配置参数 3. 实现Canal监听与同步 3.1 Canal客户端监听 3.2 同步到Redis 3.3 同步到Elasticsearch 4. 注意事项 在Spring Boot中通过Canal监听MySQL数据库变更并同步…

目录

1. 环境准备

1.1 MySQL配置

1.2 部署Canal Server

2. Spring Boot项目配置

2.1 添加依赖

2.2 配置参数

3. 实现Canal监听与同步

3.1 Canal客户端监听

3.2 同步到Redis

3.3 同步到Elasticsearch

4. 注意事项


在Spring Boot中通过Canal监听MySQL数据库变更并同步更新Redis和Elasticsearch,可按照以下步骤实现:


1. 环境准备

1.1 MySQL配置
  • 开启Binlog并设置为ROW模式:
[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server-id=1
  • 创建Canal用户并授权:
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
1.2 部署Canal Server
  1. 下载Canal Server:Canal Releases
  2. 修改配置 conf/example/instance.properties
canal.instance.master.address=127.0.0.1:3306 
canal.instance.dbUsername=canal 
canal.instance.dbPassword=canal 
canal.instance.filter.regex=.*\\..*  # 监听所有库表,或指定如test.user

2. Spring Boot项目配置

2.1 添加依赖
<!-- Canal客户端 -->
<dependency><groupId>com.alibaba.otter</groupId> <artifactId>canal.client</artifactId> <version>1.1.6</version>
</dependency>
<!-- Redis -->
<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Elasticsearch -->
<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2.2 配置参数

application.yml

canal:server: 127.0.0.1:11111destination: exampleusername: canalpassword: canalspring:redis:host: localhostport: 6379data:elasticsearch:cluster-nodes: localhost:9200

3. 实现Canal监听与同步

3.1 Canal客户端监听
@Component
public class CanalListener {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Autowiredprivate ElasticsearchRestTemplate esTemplate;@PostConstructpublic void init() {CanalConnector connector = CanalConnectors.newSingleConnector( new InetSocketAddress("127.0.0.1", 11111), "example", "canal", "canal");Thread thread = new Thread(() -> {connector.connect(); connector.subscribe(".*\\..*"); while (true) {Message message = connector.getWithoutAck(100); long batchId = message.getId(); if (batchId != -1) {processEntry(message.getEntries()); connector.ack(batchId); }}});thread.start(); }private void processEntry(List<Entry> entries) {for (Entry entry : entries) {if (entry.getEntryType()  == EntryType.ROWDATA) {RowChange rowChange = RowChange.parseFrom(entry.getStoreValue()); for (RowData rowData : rowChange.getRowDatasList())  {String tableName = entry.getHeader().getTableName(); EventType eventType = rowChange.getEventType(); // 解析变更前后的数据Map<String, String> before = parseColumns(rowData.getBeforeColumnsList()); Map<String, String> after = parseColumns(rowData.getAfterColumnsList()); // 根据事件类型同步数据switch (eventType) {case INSERT:case UPDATE:syncToRedis(tableName, after);syncToElasticsearch(tableName, after);break;case DELETE:deleteFromRedis(tableName, before);deleteFromElasticsearch(tableName, before);break;}}}}}private Map<String, String> parseColumns(List<Column> columns) {return columns.stream() .collect(Collectors.toMap(Column::getName,  Column::getValue));}
}
3.2 同步到Redis
private void syncToRedis(String tableName, Map<String, String> data) {String key = tableName + ":" + data.get("id");  // 假设主键为idredisTemplate.opsForValue().set(key,  data);
}private void deleteFromRedis(String tableName, Map<String, String> data) {String key = tableName + ":" + data.get("id"); redisTemplate.delete(key); 
}
3.3 同步到Elasticsearch
private void syncToElasticsearch(String tableName, Map<String, String> data) {IndexQuery indexQuery = new IndexQueryBuilder().withId(data.get("id")) .withObject(data).build();esTemplate.index(indexQuery,  IndexCoordinates.of(tableName)); 
}private void deleteFromElasticsearch(String tableName, Map<String, String> data) {esTemplate.delete(data.get("id"),  IndexCoordinates.of(tableName)); 
}

4. 注意事项

  1. 异常处理:增加重试机制或记录错误日志,确保网络波动时的数据一致性。
  2. 性能优化:批量处理Canal消息,减少Redis/ES的频繁写入。
  3. 数据结构:确保Elasticsearch的索引Mapping与MySQL表结构兼容。
  4. 事务管理:如需强一致性,可结合本地事务表或消息队列(如RocketMQ)做可靠投递。

通过以上步骤,Spring Boot应用能够实时监听MySQL变更,并自动同步到Redis和Elasticsearch,保障数据一致性。

http://www.dtcms.com/wzjs/403510.html

相关文章:

  • 做代练网站能备案百度大数据分析平台
  • 杭州短视频培训学校深圳网络提速优化服务包
  • Wordpress网格插件贵州快速整站优化
  • 51ppt模板免费下载完整版免费ppt株洲seo
  • 保定市建网站的公司百度公司招聘
  • 西安又出现疫情了么四川seo推广公司
  • 织梦建设两个网站 视频广告联盟接单平台
  • 郑州七彩网站建设怎么制作网站详细流程
  • 如何快速搭建个人网站知了seo
  • 购物网站用模板好不好广告推广一个月多少钱
  • 供应商管理制度怎么快速优化网站
  • 网站横幅背景图免费b站推广短视频
  • 外贸建站是什么意思seo基础教程视频
  • 福州网站制西安百度代运营
  • 做网站的标签及属性微信小程序开发零基础入门
  • 北海市高德小学简介网站关键词优化的步骤和过程
  • 网站建设责任书seo少女
  • 泰安高端网站建设报价哪里有学市场营销培训班
  • 旅游网站建设与规划网站排名推广软件
  • 基层建设收录网站查数据的网站有哪些
  • 开发施工建设网站审核百度网站排名怎么提高
  • 自己做的网站和ie不兼容微信群二维码推广平台
  • 唐山网站制作价格附近有没有学电脑培训的
  • 青岛网站建设工作室软文范文大全1000字
  • 西安网站推广招聘关键词排名优化公司哪家强
  • 廊坊商昊网站建设最近最新的新闻
  • 网站 尺寸seo顾问
  • 呼和浩特企业网站建设app拉新推广平台
  • 桥头仿做网站太原最新情况
  • 做网站人员工资樱桃bt官网