「这是我参与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();
}
}
貌似没问题,也出来结果了
问题发现
忽然我看了看依赖
为什么有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的人来说。感觉倒各种不适应。但是。谁让咱们只是个打工仔呢。既然决定不了。那就去适应吧。