美文网首页
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