背景
原系统使用tcp方式接入ES,使用 ElasticsearchTemplate API方式交互ES。原springes的yml配置如下:
spring:
data:
elasticsearch:
cluster-nodes: 192.168.10.11:9300
cluster-name: xxxxxes集群名称
由于接入阿里云的ES,且加上了X-PACK验证模式,必须有用户名和密码。故拉取新的分支支持阿里云ES的配置。
springMvc模式配置
由于A项目是SpringMvc方式的配置,下面讲一下遇到的问题以及最后的配置,服务器阿里云用的是ES5。故参考了阿里云官网的配置。x-pack-transport 5.3.3。在配置是一开始仅引入了x-pack-transport。并未引入elasticsearch 5.3.3。部署就发生了 NoClassFound后者 not exists method等错误。诸如此类的问题都是x-pack-transport 和springboot里自带的ealsticsearch不兼容所致。使用mvn:dpendency:tree查看 项目的pop依赖,看出来有jar包冲突,主要涉及:elasticsearch和transport-nettyx-client。x-pack-transport中引入了transport-netty3-client。故排除原springboot的配置,自行引入相应版本。
在解决ES的冲突问题时,其实也很烦,一方面不知道该引入具体什么版本,另一方面是在是网络欠佳,工具欠佳不知道具体的每个artifactId有什么版本。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.1.7.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>