gradle构建的springboot项目使用elasticsearch-rest-high-level-client遇到的问题

618 阅读1分钟

「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战」。

最近在使用gradle构建的项目中,操作es。之前在maven中使用过。发现gradle和maven的写法还是区别很大的。这篇文章主要是展示gradle出现的问题。不会具体操作es相关数据。操作相关数据的文章大家可以自行搜索。网上多的是。这里就不展示了。

项目构建

gradle中引入依赖

api "org.elasticsearch.client:elasticsearch-rest-high-level-client:7.14.0"
api 'org.elasticsearch.client:elasticsearch-rest-client:7.14.0'
api 'org.elasticsearch:elasticsearch:7.14.0'

配置参数

如果是集群es。下面url写多个即可。

elasticsearch:

username: elastic

password: elastic

port: 9200

scheme: http

url:

- 10.0.11.61

java中配置

@Data
@Component
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticSearchProps {

    private List<String> url;

    private String username;

    private String password;

    private Integer port;

    private String scheme;

}




@Configuration
@RequiredArgsConstructor
public class ElasticSearchConfig {

    @Resource
    private ElasticSearchProps elasticSearchProps;


    @Bean
    public RestHighLevelClient restHighLevelClient() {
        final BasicCredentialsProvider basicCredentialsProvider = new BasicCredentialsProvider();
        basicCredentialsProvider
                .setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticSearchProps.getUsername(), elasticSearchProps.getPassword()));
        List<String> urls = elasticSearchProps.getUrl();
        HttpHost[] httpHosts = new HttpHost[urls.size()];
        for (int i = 0; i < urls.size(); i++) {
            httpHosts[i] = new HttpHost(urls.get(i), elasticSearchProps.getPort(), elasticSearchProps.getScheme());
        }
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(httpHosts)
                        .setHttpClientConfigCallback(httpClientBuilder -> {
                            httpClientBuilder.disableAuthCaching();
                            return httpClientBuilder.setDefaultCredentialsProvider(basicCredentialsProvider);
                        })
        );
        return client;
    }


}

测试一下

@Override
public void findAllEmployeeDetailsFromES() {
    SearchRequest searchRequest = new SearchRequest();
    //索引名称
    searchRequest.indices("demo_test");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    searchRequest.source(searchSourceBuilder);
    List<Employee> list = new ArrayList<>();
    SearchResponse searchResponse = null;
    try {
        searchResponse =client.search(searchRequest, RequestOptions.DEFAULT);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

貌似没问题,也出来结果了

问题发现

忽然我看了看依赖

QQ截图20211115134554.png

为什么有2个版本呢?

其实springboot默认设置了版本。我的springboot版本是 2.4.2 依赖的是7.9.3版本

怎么去除呢?

maven项目中 直接定义一个

<elasticsearch-rest-high-level-client.version>7.14.0</elasticsearch-rest-high-level-client.version>

gradle项目中呢?

问题解决

终于搜了下解决了


configurations.all {
    resolutionStrategy {
        dependencySubstitution {
               substitute module('org.elasticsearch:elasticsearch') with module("org.elasticsearch:elasticsearch:${elasticVersion}")
                substitute module('org.elasticsearch.client:elasticsearch-rest-client') with module("org.elasticsearch.client:elasticsearch-rest-client:${elasticVersion}")
                substitute module('org.elasticsearch.client:elasticsearch-rest-high-level-client') with module("org.elasticsearch.client:elasticsearch-rest-high-level-client:${elasticVersion}")
        }
    }
}

重新构建看下依赖.没有问题了。完美解决。

总结

希望能 帮助大家减少店弯路。现在公司项目用gradle来构建项目。对于我长期使用maven的人来说。感觉倒各种不适应。但是。谁让咱们只是个打工仔呢。既然决定不了。那就去适应吧。