# springboot数据同步Mysql-ElasticSearch **Repository Path**: black_luk/spring-boot-data-syn ## Basic Information - **Project Name**: springboot数据同步Mysql-ElasticSearch - **Description**: 搜索高德地图地点信息,记录入数据库,并将信息同步至ES用于查询 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-04-19 - **Last Updated**: 2023-04-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springboot数据同步Mysql-ElasticSearch ### 介绍 搜索高德地图地点信息,记录入数据库,并将信息同步至ES用于模糊查询 项目中所用到技术下文都有详细讲解,还提供了软件的安装地址及配置教程,非常适合像我一样的新手 ### 软件结构 非常简单的软件架构如下图: ![](img/img_1.png) 1. 首先在spring boot项目中,通过定时任务(或者controller接口),使用HTTP抓取高德地图poi(point of interest,你感兴趣的)数据,并将抓取到的数据存入MySQL数据库。 2. 数据存入MySQL后,使用canal监听MySQL的binlog,然后再在spring boot项目中额外启动一个canal客户端线程,用于拉去canal中的数据。 可能有同学会疑问,为什么你都有数据了,直接再写入elasticsearch中不就好吗? 其实这也是一种方法,名为双写。但在生产环境中,可能会有很多个地方触发入库的操作, 若是一不小心有一个地方只写入mysql库,忘记写入es,会造成数据不一致。此外,这个canal客户端还可以部署在其他的实例上,或者直接发送到kafka,供其他系统同步。 3. canal客户端获取到数据后,根据实际需求,转换或者增加一些字段,存入到es中 ### 安装教程 项目除了使用到了Java和Spring Boot框架外,还有需要安装canal、MySQL和ElasticSearch, 此外若要抓取的数据还需要前往高德地图申请key 下面是这些软件的版本和安装地址,其中mysql和java若已经安装了,直接用已安装的版本问题应该不大 | 软件 | 版本 | 下载连接 | |---------------|--------|---------------------------------------------------------------------| | Java | jdk1.8 | | | MySQL | 8.0.28 | | | Canal | 1.1.4 | | | ElasticSearch | 7.8.0 | | 安装后,canal需要配置监听的数据库信息,mysql需要开启binlog,详细步骤可看 ### 项目结构 master分支因为要通过excel导入地区表,poi字典表等进入数据库,所以看看起来多了一点easyExcel的操作, 不了解且对easyExcel不是很感兴趣的的同学和切换到simple分支,快速了项目结构 ![img.png](img/img2.png) 项目的代码结构和大概作用如下: ![img.png](img/img_2.png) ### 启动准备和测试 项目启动前先看以下是软件有无启动或配置成功 1. canal服务端 2. elasticSearch,并查看配置文件的端口号是否与启动的服务端一致 3. MySQL数据库的连接和密码是否和你的一样,相应的数据库和表创建了没有(建表语句在doc文件的CreateTable.sql), 是否已初始化了表poi_code和address_code(可以通过MySQL导入initDicTable.sql初始化、 也可以通过ExcelController导入Excel初始化) 4. 配置了高德地图key没有,若需配置多个key,多个key以逗号分割,逗号后面不要有空格(高德地图申请key)。虽然我也有key,但奈何使用次数有限,就不放项目上去了 5. 接下来可以根据poiCode和地址查询自己喜欢的数据啦 利用postMan请求发送请求,若成功返回,过几秒后控制台有canal客户端日志输出,查看ElasticSearch成功接收到数据,则项目启动成功。 postman请求URL: ```http://localhost:8080/test/getPoi2``` 请求参数: ```json { "types" : "110103", "region" : 110000, "page_num" : 1, "page_size" : 20 } ``` 预计返回内容 ```json { "status": 1, "count": 20, "info": "OK", "infocode": "10000", "pois": [ { "id": "B000A9PI2V", "name": "地坛公园-牡丹园", "type": "风景名胜;公园广场;植物园", "typecode": "110103", "address": "安定门外大街2号地坛公园内(东北角)", "location": "116.416823,39.954899", "adcode": "110101", "timestamp": null, "photos": [ { "title": "", "url": "http://store.is.autonavi.com/showpic/53bb4fb0a310502a4d11000f" }, { "title": "", "url": "http://store.is.autonavi.com/showpic/53bb4fb0a310502a4d11007b" } ], "business": { "tag": null, "tel": "010-64214657", "rating": "4.3", "cost": null } }, { "id": "B000A8506P", "name": "妙峰樱桃沉浸营地", "......" : "......" } ] } ``` ### 项目有何用 其实.. 这个我也暂时... 还有有点作用的...... 比如至少学会了一种数据同步方式 ### 如果实在启动不来欢迎私信我 ~~(女士优先)~~