放弃使用spring-boot-starter-data-elasticsearch

2,528 阅读2分钟

背景:项目使用的是spring-boot,所以选择ES客户端的时候图简单,就用了spring-boot-starter-data-elasticsearch 版本为 2.1.2.RELEASE。

一切都按照美好在进行,开发编码,单元测试,本地联调都OK。

当我们把应用部署到腾讯云的时候,发现 ip:9300 端口连接不上,在腾讯云

控制台找了一圈也没找到tcp端口的相关设置。只有http的9200端口。

于是乎翻阅官方文档,如下图:


原文链接如下:

cloud.tencent.com/document/pr…

图中标红的箭头写明了,不推荐TransportClient。wtf,spring-boot-starter-data-elasticsearch就是使用的这种方式链接,居然不推荐。马上去官网找相关资料。如下图:


原文链接如下:

www.elastic.co/guide/en/el…

上图中最重要的信息就是:

TransportClient被弃用,取而代之的是Java High Level REST Client ,TransportClient将在Elasticsearch 8.0中被删除。

虽然腾讯云上面ES版本是6.4.3,但是我们还是要与时俱进。所以我将项目的ES 客户端从

spring-boot-starter-data-elasticsearch 换为了

compile 'org.elasticsearch.client:elasticsearch-rest-client:6.4.3'
compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.3'

虽然换了客户端,但是它支持QueryBuilder,兼容之前TransportClient的代码,所以代码的改动量大大减少。demo如下。

SearchRequest searchRequest = new SearchRequest(); 
SearchSourceBuilder builder = new SearchSourceBuilder(); 
searchSourceBuilder.query(xxxQuery); 
searchRequest.source(builder);

总结:

经过这个事情,我的收获如下。

1.不能光凭着以前的经验或者图简单就选择一个工具(特别是ES这种更新很快的框架,一定看清楚它目前的大方向和主流支持的工具)。

2.做事情之前提前做好预研,让风险和问题早暴露。

3.代码结构解耦真的很重要。否则发生这种改动的时候,你会很头大。

4.使用spring-boot-starter-xxx一时爽,但是不一定能一直爽。(spring-boot-starter-xxx虽然强大而且方便,但是他毕竟需要人来更新维护,对于像ES这样版本更新很快的框架,spring-boot-starter-xxx很难跟上更新的节奏)