如果不是Spring Boot项目,那么根据Elasticsearch的版本选择对应版本的依赖即可。
例:Elasticsearch的版本为5.4.0,那么
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>5.4.0</version> </dependency>
下方开始介绍Spring Boot整合Elasticsearch, 并且如何同步mysql和Elasticsearch的数据。
我的版本(经过我自己的使用,确认没有问题):
1.电脑:windows10操作系统
2.Elasticsearch版本:7.0.0
3.ik分词器版本:7.0.0(必须和Elasticsearch版本一致)
4.postman: 无版本(这个用来查看indexs的数据)当然,相类似的工具还有curl, kibana, 当时这两个需要要版本和Elasticsearch一致,相比较麻烦(外国网站,我就普通下载花了1整天才下完,所以不想下载这两个可以选择不下载,对我们写代码没有影响)
5.elasticsearch-head-master: 无版本的(这个下载源代码后需要编译,启动方式:
需要先启动Elasticsearch(浏览器输入localhost:9200,出现关于elasticsearch的信息json文本说明成功),再:
方式1.cmd切换到文件夹后npm run start, 然后浏览器网址处输入localhost:9100
方式2.或者选择直接双击文件夹中的index.html文件)
6.Spring Boot版本:2.2.4RELEASE
若是关于Elasticsearch的一些基础安装和使用不会可以百度,下面正式开始了
开始使用:整合方式我了解到的有如下几种
1.使用elasticsearch官方的logstash进行mysql和Elasticsearch的数据同步, 下面我介绍的就是这种。限制:需要和Elasticsearch版本相同版本的Logstash, Elasticsearch的官网可以下载Logstash(下载速度也很慢,我下载的是7.0.0,超过100M, 花了一上午时间)
2.使用Bboss这个开源项目,它的官方说法是兼容所有版本的Elasticsearch. 因此不会出现版本问题,可以点击 开始学习 前往,说明很详细
3. 使用elasticsearch-river-jdbc, 不推荐。和它类似的还有2种,但是不推荐,原因:支持的Elasticsearch过低。这个似乎是最高支持6.0左右的版本,另外两个的其中一个只支持Elasticsearch2.0版本左右,所以我也记不得了就不介绍了,有兴趣的可以去看看。
Spring Boot使用Elastcisearch, 并且使用Logstash同步mysql和Elasticsearch数据:
1.Spring Boot使用Elasticsearch:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <!--版本是和Spring Boot的parent同步的,默认2.2.4RELEASE,里面的spring-data-lasticsearch版本为3.2.4.RELEASE,
再里面的elasticsearch-rest-high-level-client和transport版本为6.8.6-->
具体的整合讲解可以参考这篇文章
2.下载Logstash,我选择的是zip压缩包下载后解压,不能放中文路径(像这种开发用的东西最好全放英文路径下,我上次还碰到过安装路径有符号也会报错的)。
1.判断是否安装成功:命令忘记了,这个不重要,我们直接下一步。
2.进入Logstash的bin目录下,在里面自己创建jdbc.conf文件,文件名随意,后面cmd命令跟着变就行了:注意:我有几行配置打了#是因为这几行有问题,我运行后排错注释了:
input { stdin {} jdbc { #mysql的jdbc连接工具jar包 jdbc_driver_library => "D:\softwareRepository\logstash-7.0.0\config\test-config\mysql-connector-java-5.1.46.jar" #jdbc驱动类全类名 jdbc_driver_class => "com.mysql.jdbc.Driver" #jdbc连接url jdbc_connection_string => "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC" #数据库用户名 jdbc_user => "root" #数据库密码 jdbc_password => "root" #数据同步时间及那个(都是*则每一分钟同步一次) schedule => "* * * * *" #jdbc分页查询开启 #jdbc_paging_enabled => "true" #查询每页显示数据条数 #jdbc_page_size => "50000" #sql文件路径(就是需要同步的数据) statement_filepath => "D:\softwareRepository\logstash-7.0.0\config\test-config\zyl.sql" #上次更新位置标记文件路径 last_run_metadata_path => "D:\softwareRepository\logstash-7.0.0\config\test-config\jobLastInfo.txt" #每次启动是否清除上一项配置文件中数据 clean_run => "false" #开启所有字段名转成小写 lowercase_column_names => "true" #解决中文乱码问题 codec => plain { charset => "UTF-8"} #是否记录上次运行的记录 record_last_run => "true" #是否使用其他字段判断进行数据库同步 use_column_value => "true" #数据库中的增量指标字段名 tracking_column_type => "timestamp" tracking_column => "update_time" } } filter { json { source => "message" remove_field => ["message"] } } output { elasticsearch { index => "zyltest" document_type => "%{type}" #es服务器 hosts => "localhost:9200" document_id => "%{id}" } stdout { codec => json_lines } }
上面的配置我是参考了三篇文章才明白什么意思:……他们没写全,特别是.sql文件是个问题,我现在开始说明下:
文件复制后,我们到config目录下创建一个文件夹test-config(自己创建的东西文件名都是随意的,配合着配置文件改就是了),里面放入一个jobLastInfo.txt, zyl.sql,以及一个mysql-connector-java的jar包。其中.txt文件我不知道什么作用,创建好就行了,然后最关键的是.sql文件,里面是查询语句,例如
select * from test1;
我看的2篇文章都没有提到sql文件写什么语句……我只测试了一个查询语句,快晚上11点了,明天这篇文章可能不会再改了,你们也可以自己试试执行查询两个表。再然后是jar包,我启动的logstash报了关于jar包的error,问我确定set了jar的位置吗(好像是这个问题)?但是实际上没有问题,照样运行的。
我把我的数据库拿出来: 先执行创建表和insert语句就可以了,增删改到第3步出现图片所示后再进行(然后再在每分钟的00秒看看效果,会发现虽然所有修改的内容都被Logstash查出来了,但是只有增改这两项更新了索引,删除没有效果,并且修改数据即使不对update_time进行修改也会更新索引)
drop table test1; create table test1( id int primary key auto_increment, name varchar(10) default "我是笨蛋5号我!…", update_time date NOT NULL DEFAULT "2017-3-3 3:3:3" ); insert into test1() value (); update test1 set name="bb" where id in (1,2); update test1 set name="cc",update_time=now() where id in(3,4); update test1 set name="ddd" where id in (5,6); delete from test1 where id in (7,8);
需要注意一点:tracking_column_type => "timestamp"这个值必须是timestamp,不然会报错的提醒你改回来的,但是数据库不需要一定是tiemstamp的时间类型,我试了datetime,date,time,timestamp这四种时间类型我都试了,结果都一样成功了。(因为无论是哪种类型,虽然差数据库显示的格式是不一样,但Logstash差数据显示的类型都是下图的那种时间格式)。
3.启动elasticsearch后,可以选择启动postman和elasticsearch-head-master以观察情况。开始启动logstash: cmd切换到bin目录下执行:logstash -f jdbc.conf。执行命令后效果如图:
4.如果你的配置和我一模一样,那么会在localhost:9100看到有个zyltest的index生成,在postman中通过GET输入http://localhost:9200/zyltest/_search可以查看到生成了索引(额,忘了叫什么,就这样吧)。
5.注意:logstash只可以同步增和改,因此删除是需要自己在代码中同步的,通过deleteXX方法(忘了是什么方法了,不想找了)。也就是说:在开启Elasticsearch和Logstash的服务下,每分钟它会自动的进行增和改的同步,然后代码中自己手动实现删除数据的同步。
就到此结束了
额,写到一半切换了下wifi, 内容没有保存草稿,自动刷新界面就没了,累……
Elasticsearch的快速使用——Spring Boot使用Elastcisearch, 并且使用Logstash同步mysql和Elasticsearch的数据
原文:https://www.cnblogs.com/woyujiezhen/p/12374402.html
如果您也喜欢它,动动您的小指点个赞吧