Springcloud Alibaba 使用Canal将MySql数据实时同步到Elasticsearch

本篇文章在Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性-CSDN博客

基础上使用canal将mysql数据实时同步到Elasticsearch。

1. 数据库准备

CREATE DATABASE /*!32312 IF NOT EXISTS*/`shop` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;USE `shop`;/*Table structure for table `sku` */DROP TABLE IF EXISTS `sku`;CREATE TABLE `sku` (`id` VARCHAR(60) NOT NULL COMMENT '商品id',`name` VARCHAR(200) NOT NULL COMMENT 'SKU名称',`price` INT NOT NULL DEFAULT '1' COMMENT '价格(分)',`num` INT DEFAULT '100' COMMENT '库存数量',`image` VARCHAR(200) DEFAULT NULL COMMENT '商品图片',`images` VARCHAR(2000) DEFAULT NULL COMMENT '商品图片列表',`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`spu_id` VARCHAR(60) DEFAULT NULL COMMENT 'SPUID',`category_id` INT DEFAULT NULL COMMENT '类目ID',`category_name` VARCHAR(200) DEFAULT NULL COMMENT '类目名称',`brand_id` INT DEFAULT NULL COMMENT '品牌id',`brand_name` VARCHAR(100) DEFAULT NULL COMMENT '品牌名称',`sku_attribute` VARCHAR(200) DEFAULT NULL COMMENT '规格',`status` INT DEFAULT '1' COMMENT '商品状态 1-正常,2-下架,3-删除',PRIMARY KEY (`id`),KEY `cid` (`category_id`),KEY `status` (`status`),KEY `updated` (`update_time`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb3 COMMENT='商品表';/*Data for the table `sku` */INSERT  INTO `sku`(`id`,`name`,`price`,`num`,`image`,`images`,`create_time`,`update_time`,`spu_id`,`category_id`,`category_name`,`brand_id`,`brand_name`,`sku_attribute`,`status`) VALUES 
('1318594982227025922','华为Mate40 Pro 32G',114,1228,'https://sklll.oss-cn-beijing.aliyuncs.com/secby/af1faf56-b10a-4700-9896-3143a2d1c40f.jpg','https://sklll.oss-cn-beijing.aliyuncs.com/secby/a65bfbe4-21b7-42b2-b5cf-47a9730e0a16.jpg,https://sklll.oss-cn-beijing.aliyuncs.com/secby/fa52ef66-7724-4d6e-bece-15eba0f8f903.jpg,https://sklll.oss-cn-beijing.aliyuncs.com/secby/734f0f17-ac73-45d3-a6bf-83e1569ce887.jpg','2020-10-20 16:48:37','2023-12-29 19:02:16','1318594982147334146',11159,'软件研发',11,'华为','{\"就业薪资\":\"10K起\",\"学习费用\":\"2万\"}',1),
('1318596430360813570','华为Mate40 Pro 32G 1800万像素',112,1227,'https://sklll.oss-cn-beijing.aliyuncs.com/secby/9247d041-e940-426c-8e50-06084b631063.jpg','https://sklll.oss-cn-beijing.aliyuncs.com/secby/5f5b7435-6cf2-4797-8f65-d4abff181390.jpg','2020-10-20 16:54:22','2023-12-29 19:07:47','1318596430293704706',11159,'软件研发',11,'华为','{\"就业薪资\":\"10K起\",\"学习费用\":\"2万\"}',1),
('1318596430398562305','华为Mate40 Pro 128G',111,1226,'https://sklll.oss-cn-beijing.aliyuncs.com/secby/900a3618-9884-4778-bad9-c6c31eaf3eab.jpg','https://sklll.oss-cn-beijing.aliyuncs.com/secby/5f5b7435-6cf2-4797-8f65-d4abff181390.jpg','2020-10-20 16:54:22','2023-12-29 19:11:28','1318596430293704706',11159,'软件研发',11,'华为','{\"就业薪资\":\"10K起\",\"学习费用\":\"2万\"}',1),
('1318599511605563394','格力手机 5G手机',100,1225,'https://sklll.oss-cn-beijing.aliyuncs.com/secby/2b233c6a-5acc-449e-ba3a-70a506100948.jpg','https://sklll.oss-cn-beijing.aliyuncs.com/secby/ffc66a17-edfc-43bb-8f66-431b1e9bf606.jpg','2020-10-20 17:06:37','2023-12-29 19:11:25','1318599511492317185',11159,'软件研发',11,'华为','{\"就业薪资\":\"10K起\",\"学习费用\":\"2万\"}',1),
('1318599511647506433','格力手机 5G手机 红色',789,1224,'https://sklll.oss-cn-beijing.aliyuncs.com/secby/1c1fbfea-af9f-49e7-b89b-35e751874399.jpg','https://sklll.oss-cn-beijing.aliyuncs.com/secby/ffc66a17-edfc-43bb-8f66-431b1e9bf606.jpg','2020-10-20 17:06:37','2020-10-20 17:06:37','1318599511492317185',11159,'软件研发',11,'华为','{\"就业薪资\":\"10K起\",\"学习费用\":\"2万\"}',1),

 2. 公共部分

公共包

       <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--MyBatis Plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.2</version></dependency><!--MySQL--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--Nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>javax.persistence</groupId><artifactId>persistence-api</artifactId><version>1.0</version><scope>compile</scope></dependency>

实体类Sku

@Column注解

用来标识实体类中属性与数据表中字段的对应关系

name
定义了被标注字段在数据库表中所对应字段的名称;由于驼峰命名法,如果不使用@Column字段,canal在监控数据变化时,获得的实体类部分字段为null,比如create_time等等。

@TableName(value ="sku")
@Data
@Table
public class Sku implements Serializable {@TableId(type = IdType.ASSIGN_ID)private String id;private String name;private Integer price;private Integer num;private String image;private String images;@Column(name = "create_time")private Date createTime;@Column(name = "update_time")private Date updateTime;@Column(name = "spu_id")private String spuId;@Column(name = "category_id")private Integer categoryId;@Column(name = "category_name")private String categoryName;@Column(name = "brand_id")private Integer brandId;@Column(name = "brand_name")private String brandName;@Column(name = "sku_attribute")private String skuAttribute;private Integer status;private static final long serialVersionUID = 1L;
}

实体类SkuEs

@Data
@Document(indexName = "skusearch")//indexName一定全小写,不然出错
public class SkuEs {@Idprivate String id;@Field(type = FieldType.Text,analyzer = "ik_smart",searchAnalyzer = "ik_smart")private String name;private Integer price;private Integer num;private String image;private String images;private Date createTime;private Date updateTime;private String spuId;private Integer categoryId;//Keyword:不分词@Field(type= FieldType.Keyword)private String categoryName;private Integer brandId;@Field(type=FieldType.Keyword)private String brandName;@Field(type=FieldType.Keyword)private String skuAttribute;private Integer status;
}

3. mall-search-service

导入依赖:

       <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId><version>2.6.3</version></dependency>

这里使用的springboot版本为2.7.12,springboot和spring-boot-starter-data-elasticsearch的版本问题会导致异常:

java.lang.NoSuchFieldError: INDEX_CONTENT_TYPE

bootstrap.yaml代码如下:

server:port: 8084
spring:application:name: mall-searchcloud:nacos:config:file-extension: yamlserver-addr: localhost:8848discovery:#Nacos的注册地址server-addr: localhost:8848#Elasticsearch服务配置 6.8.12elasticsearch:uris: http://localhost:9200

编写SkuSearchMapper,在主启动类上添加@EnableElasticsearchRepositories(basePackages = {"xx"}),basePackages指定mapper包路径

public interface SkuSearchMapper extends ElasticsearchRepository<SkuEs,String> {
}

Service层

public interface SkuSearchService {void add(SkuEs skuEs);void del(String id);
}@Service
public class SkuSearchServiceImpl implements SkuSearchService {@AutowiredSkuSearchMapper skuSearchMapper;@AutowiredElasticsearchRestTemplate elasticsearchRestTemplate;@Overridepublic void add(SkuEs skuEs) {skuSearchMapper.save(skuEs);}@Overridepublic void del(String id) {skuSearchMapper.deleteById(id);}
}

controller层

@RestController
@RequestMapping(value = "/search")
public class SkuSearchController {@Autowiredprivate SkuSearchService skuSearchService;/****** 增加索引*/@PostMapping(value = "/add")public RespResult add(@RequestBody SkuEs skuEs){skuSearchService.add(skuEs);return RespResult.ok();}/**** 删除索引*/@DeleteMapping(value = "/del/{id}")public RespResult del(@PathVariable(value = "id")String id){skuSearchService.del(id);return RespResult.ok();}
}

4. mall-canal-service

基于上一篇文章Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性-CSDN博客的canal服务。

添加以下代码:

feign接口

@FeignClient(value = "mall-search")public interface SkuSearchFeign {@PostMapping(value = "/search/add")RespResult add(@RequestBody SkuEs skuEs);/**** 删除索引*/@DeleteMapping(value = "/search/del/{id}")RespResult del(@PathVariable(value = "id")String id);
}

 canal设计代码如下:

@Component
@CanalTable(value = "sku")
public class SkuSearchHandler implements EntryHandler<Sku> {@AutowiredSkuSearchFeign skuSearchFeign;@Overridepublic void insert(Sku sku) {System.out.println(sku);String jsonString = JSON.toJSONString(sku);SkuEs skuEs = JSON.parseObject(jsonString, SkuEs.class);skuSearchFeign.add(skuEs);}@Overridepublic void update(Sku before, Sku after) {System.out.println(after);String jsonString = JSON.toJSONString(after);SkuEs skuEs = JSON.parseObject(jsonString, SkuEs.class);System.out.println(skuEs);skuSearchFeign.add(skuEs);}@Overridepublic void delete(Sku sku) {System.out.println(sku);skuSearchFeign.del(sku.getId());}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/584290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

117. 填充每个节点的下一个右侧节点指针 II

层序遍历&#xff0c;有点类似这道题。 104. 二叉树的最大深度 /* // Definition for a Node. class Node {public int val;public Node left;public Node right;public Node next;public Node() {}public Node(int _val) {val _val;}public Node(int _val, Node _left, Node…

Spring的Bean你了解吗

Bean的配置 Spring容器支持XML(常用)和Properties两种格式的配置文件 Spring中XML配置文件的根元素是,中包含了多个子元素&#xff0c;每个子元素定义了一个Bean,并描述了该Bean如何装配到Spring容器中 元素包含了多个属性以及子元素&#xff0c;常用属性及子元素如下所示 i…

Raid的介绍

一、RAID的介绍 1.什么是raid "RAID"一词是由David Patterson, Garth A. Gibson, Randy Katz 于1987年在加州大学伯克利分校发明的。在1988年6月SIGMOD会议上提交的论文"A Case for Redundant Arrays of Inexpensive Disks”"中提出&#xff0c;当时性能最…

python可视化界面自动生成,python如何做可视化界面

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python gui可视化操作界面制作&#xff0c;python做出的炫酷的可视化&#xff0c;现在让我们一起来看看吧&#xff01; 目录 前言 一.环境配置 插件&#xff1a; 1.python 2.Chinese 3.Open In Default Browser 安装pyt…

Linux 赛题FTP配置

部署FTP站点&#xff08;匿名用户&#xff09; mkdir -p /var/ftp/文档中心 //创建目录 cd /var/ftp/文档中心 mkdir 产品技术文档 公司品牌宣传 常用软件工具 公司规章制度 chown -R ftp.ftp /var/ftp/文档中心 //修改所属主和所属组&#xff0c;避免用户无法读写目录中…

2024前端React最新面试题:React设计思想是什么?

React设计思想是什么&#xff1f; 回答思路&#xff1a;react的组件化-->react的数据驱动-->react的虚拟DOMreact的组件化数据驱动视图虚拟DOM 回答思路&#xff1a;react的组件化–>react的数据驱动–>react的虚拟DOM react的组件化 每个组件都符合开放封闭原则…

方案:智能分析网关V4区域人数超员AI算法模型的应用场景介绍

视频AI智能分析技术已经深入到人类生活的各个角落&#xff0c;与社会发展的方方面面紧密相连。从日常生活中的各种场景&#xff0c;如人脸识别、车牌识别&#xff0c;到工业生产中的安全监控&#xff0c;如工厂园区的翻越围栏识别、入侵识别、工地的安全帽识别、车间流水线产品…

MySQL 8.0 InnoDB Tablespaces之Undo Tablespaces(UNDO表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之Undo Tablespaces&#xff08;UNDO表空间&#xff09;Undo Tablespaces&#xff08;UNDO表空间&#xff09;默认UNDO表空间添加 Undo 表空间查看Undo 相关的信息查看Undo 相关参数变量查看Undo 状态信息通过information_schema.innodb_…

python使用watchdog监听文件变化并打包成docker镜像

文章目录 简介1.监听文件的代码2.获取依赖列表文件3.创建Dockerfile文件4.上传文件到服务器上5.构建容器并启动6.更新main.py代码操作 简介 最近用python帮公司写了一个监控目录下文件发生变化的插件&#xff0c;在打包成docker镜像的过程中出现了一些小问题&#xff0c;特意记…

Unity中Shader裁剪空间推导(透视相机到裁剪空间的转化矩阵)

文章目录 前言一、简单看一下 观察空间—>裁剪空间—>屏幕空间 的转化1、观察空间&#xff08;右手坐标系、透视相机&#xff09;2、裁剪空间&#xff08;左手坐标系、且转化为了齐次坐标&#xff09;3、屏幕空间&#xff08;把裁剪坐标归一化设置&#xff09;4、从观察空…

基于YOLOv8的遥感SAR舰船小目标识别

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;基于YOLOv8的遥感SAR舰船小目标&#xff0c;阐述了整个数据制作和训练可视化过程 1.YOLOv8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的…

【LangChain】与文档聊天:将OpenAI与LangChain集成的终极指南

欢迎来到人工智能的迷人世界&#xff0c;在那里&#xff0c;人与机器之间的通信越来越模糊。在这篇博客文章中&#xff0c;我们将探索人工智能驱动交互的一个令人兴奋的新前沿&#xff1a;与您的文本文档聊天&#xff01;借助OpenAI模型和创新的LangChain框架的强大组合&#x…

Swift学习笔记第二节:数组类型

1、代码 import Foundationlet arr1 [1, 2, 3, 4, 5, 6] let arr2 ["a", "b", "c", "d", "e", "f"] let arr3 [true, false, true] let arr4: Array<Int> [1, 2, 3] let arr5: [Int] [1, 2, 3] let a…

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于FSRCNN的TPU平台超分辨率模型部署方案

2023 CCF 大数据与计算智能大赛 基于TPU平台实现超分辨率重建模型部署 基于FSRCNN的TPU平台超分辨率模型部署方案 WELL 刘渝 人工智能 研一 西安交通大学 中国-西安 1461003622qq.com 史政立 网络空间安全 研一 西安交通大学 中国-西安 1170774291qq.com 崔琳、张…

Vue - 实现文件导出文件保存下载

1 文件导出&#xff1a;使用XLSX插件 需求背景&#xff1a;纯前端导出&#xff0c;如 在前端页面勾选部分表格数据&#xff0c;点击"导出"按钮导出Excel文件。 实现思路&#xff1a; 1.通过XLSX插件的 XLSX.utils.book_new()方法&#xff0c;创建excel工作蒲对象wb…

机器学习(三) -- 特征工程(更新中)

系列文章目录 未完待续…… 目录 系列文章目录 前言 tips&#xff1a;这里只是总结&#xff0c;不是教程哈。 “***”开头的是给好奇心重的宝宝看的&#xff0c;其实不太重要可以跳过。 此处以下所有内容均为暂定&#xff0c;因为我还没找到一个好的&#xff0c;让小白&…

第7章 1 异常处理

bug的由来及分类 p81 字符串形式表示的数字之间也可以比较大小 import re ageinput(年龄&#xff1a;) if age>18:print(age)列表的append操作每次只能添加一个元素&#xff1a; lst[] lst.append(A) lst.append(B) # lst.append(A,B) 错误python中的异常处理机制 p82 t…

mysql5.7 数据库主从同步实现

mysql5.7 数据库主从同步实现&#xff0c;实操环境&#xff1a;linux centos7 一&#xff0c;安装mysql5.7 1 配置MySql5.7的 Yum仓库配置 yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm2 安装mysql5.7 yum install -y mysql-c…

Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中

目录 默认样式 修改默认字体颜色&#xff1a; 修改鼠标悬浮/选中字体颜色&#xff1a; 去掉长分割线并修改下划线颜色 完整代码 默认样式 注意事项&#xff1a;一定要在 <style scoped>不然修改的样式不会覆盖生效 修改默认字体颜色&#xff1a; ::v-deep .el-tabs__…

[鹏城杯 2022]简单包含

[鹏城杯 2022]简单包含 wp 题目代码如下&#xff1a; <?php highlight_file(__FILE__); include($_POST["flag"]); //flag in /var/www/html/flag.php; 直接 POST 传参&#xff1a; flag/var/www/html/flag.php 会触发 waf 。 尝试用伪协议读取&#xff1a; …