美文网首页
Elasticsearch与SpringBoot集成版本问题

Elasticsearch与SpringBoot集成版本问题

作者: 一个菜鸟JAVA | 来源:发表于2021-04-28 16:36 被阅读0次

背景

新创建的SpringBoot项目需要用到ElasticSearch,但是因为ES版本为7.0与SpringBoot中的Spring Data Elasticsearch没有合适的版本,在项目启动时给出警告提示。于是决定放弃使用Spring Data Elasticsearch,直接使用elasticsearch-rest-high-level-client来操作ES。在pom文件中添加依赖如下:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.0.0</version>
</dependency>

但是在启动项目后,抛出异常。异常的关键信息如下:

Caused by: java.lang.IncompatibleClassChangeError: Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected

解决方案

从异常信息中没有看出什么端倪,最后看了下elasticsearch-rest-high-level-client的依赖,发现问题根源。依赖如下图所示:

错误的依赖.png

从依赖中可以看出,有部分依赖的版本并不是我指定的7.0.0,而是7.9.3,这是为什么呢?原来是因为在spring-boot-starter-parent中SpringBoot设定的版本为7.9.3,这导致了部分依赖不正确。解决办法也很简单,在项目的pom.xml文件中properties节点设置elasticsearch.version版本为7.0.0即可。修改内容如下:

pom文件修改.png

修改后依赖如下:

修改后的依赖.png

再次启动项目,异常消失,完美解决问题。

ES客户端配置

创建ES客户端代码比较简单,整个配置如下:

@Bean
public RestHighLevelClient restHighLevelClient(){
    RestClientBuilder builder = RestClient.builder(new HttpHost("127.0.0.1", 9200));
    //设置账号和密码
    CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    Credentials credentials = new UsernamePasswordCredentials("test","test");
    credentialsProvider.setCredentials(AuthScope.ANY,credentials);
    builder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
    return new RestHighLevelClient(builder);
}

配置这个之后我们在使用时只需要使用@Autowrite注入即可使用。关于相关API如何使用可以参考官网,官网的文档也是比较清晰的。

相关文章

网友评论

      本文标题:Elasticsearch与SpringBoot集成版本问题

      本文链接:https://www.haomeiwen.com/subject/jiwvrltx.html