1 Star 0 Fork 1

黑妞/springboot数据同步Mysql-ElasticSearch

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

springboot数据同步Mysql-ElasticSearch

介绍

搜索高德地图地点信息,记录入数据库,并将信息同步至ES用于模糊查询

项目中所用到技术下文都有详细讲解,还提供了软件的安装地址及配置教程,非常适合像我一样的新手

软件结构

非常简单的软件架构如下图:

  1. 首先在spring boot项目中,通过定时任务(或者controller接口),使用HTTP抓取高德地图poi(point of interest,你感兴趣的)数据,并将抓取到的数据存入MySQL数据库。

  2. 数据存入MySQL后,使用canal监听MySQL的binlog,然后再在spring boot项目中额外启动一个canal客户端线程,用于拉去canal中的数据。

可能有同学会疑问,为什么你都有数据了,直接再写入elasticsearch中不就好吗? 其实这也是一种方法,名为双写。但在生产环境中,可能会有很多个地方触发入库的操作, 若是一不小心有一个地方只写入mysql库,忘记写入es,会造成数据不一致。此外,这个canal客户端还可以部署在其他的实例上,或者直接发送到kafka,供其他系统同步。

  1. canal客户端获取到数据后,根据实际需求,转换或者增加一些字段,存入到es中

安装教程

项目除了使用到了Java和Spring Boot框架外,还有需要安装canal、MySQL和ElasticSearch, 此外若要抓取的数据还需要前往高德地图https://lbs.amap.com/申请key

下面是这些软件的版本和安装地址,其中mysql和java若已经安装了,直接用已安装的版本问题应该不大

软件 版本 下载连接
Java jdk1.8 https://www.oracle.com/java/technologies/downloads/#java8-windows
MySQL 8.0.28 https://dev.mysql.com/downloads/mysql/
Canal 1.1.4 https://xiaopeng.feishu.cn/docx/doxcnMt2pQ1q7dqeJLJNuk4H9Ob
ElasticSearch 7.8.0 https://www.elastic.co/cn/downloads/past-releases/#elasticsearch

安装后,canal需要配置监听的数据库信息,mysql需要开启binlog,详细步骤可看https://xiaopeng.feishu.cn/docx/doxcnMt2pQ1q7dqeJLJNuk4H9Ob#doxcnMAIoAog2q84QMlaK2LV13g

项目结构

master分支因为要通过excel导入地区表,poi字典表等进入数据库,所以看看起来多了一点easyExcel的操作, 不了解且对easyExcel不是很感兴趣的的同学和切换到simple分支,快速了项目结构 img.png

项目的代码结构和大概作用如下:

img.png

启动准备和测试

项目启动前先看以下是软件有无启动或配置成功

  1. canal服务端
  2. elasticSearch,并查看配置文件的端口号是否与启动的服务端一致
  3. MySQL数据库的连接和密码是否和你的一样,相应的数据库和表创建了没有(建表语句在doc文件的CreateTable.sql), 是否已初始化了表poi_code和address_code(可以通过MySQL导入initDicTable.sql初始化、 也可以通过ExcelController导入Excel初始化)
  4. 配置了高德地图key没有,若需配置多个key,多个key以逗号分割,逗号后面不要有空格(高德地图https://lbs.amap.com/申请key)。虽然我也有key,但奈何使用次数有限,就不放项目上去了
  5. 接下来可以根据poiCode和地址查询自己喜欢的数据啦

利用postMan请求发送请求,若成功返回,过几秒后控制台有canal客户端日志输出,查看ElasticSearch成功接收到数据,则项目启动成功。

postman请求URL: http://localhost:8080/test/getPoi2

请求参数:

{
    "types" : "110103",
    "region" : 110000,
    "page_num" : 1,
    "page_size" : 20
}

预计返回内容

{
  "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": "妙峰樱桃沉浸营地",
      "......" : "......"
    }
  ]
}

项目有何用

其实.. 这个我也暂时... 还有有点作用的...... 比如至少学会了一种数据同步方式

如果实在启动不来欢迎私信我

(女士优先)

空文件

简介

搜索高德地图地点信息,记录入数据库,并将信息同步至ES用于查询 展开 收起
取消

发行版

暂无发行版

贡献者 (2)

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/black_luk/spring-boot-data-syn.git
git@gitee.com:black_luk/spring-boot-data-syn.git
black_luk
spring-boot-data-syn
springboot数据同步Mysql-ElasticSearch
master

搜索帮助