软件版本
springboot 版本 2.1.7
elasticsearch版本 6.3.1
pom文件中引入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<!-- springBoot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.3.1</version>
<exclusions>
<exclusion>
<artifactId>elasticsearch-rest-client</artifactId>
<groupId>org.elasticsearch.client</groupId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<artifactId>elasticsearch-rest-client</artifactId>
<groupId>org.elasticsearch.client</groupId>
<version>6.3.1</version>
</dependency>
<dependency>
<artifactId>elasticsearch</artifactId>
<groupId>org.elasticsearch</groupId>
<version>6.3.1</version>
</dependency>
</dependencies>
application.yml文件配置
es:
userName: elastic
passwd: UhPkKXbAdL6wZA1Bdzju
hosts: 192.168.0.1:9200,192.168.0.2:9200,192.168.0.3:9200
Client 封装
package com.example.demo;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.reactor.IOReactorConfig;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
@Configuration
public class RestClientFactory {
@Value("${es.userName}")
private String userName;
@Value("${es.passwd}")
private String password;
@Value("${es.hosts}")
private String hosts;
@Bean
public RestHighLevelClient restClient() {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
HttpHost[] httpHosts = Arrays.stream(hosts.split(",")).map(x -> {
String[] hostInfo = x.split(":");
return new HttpHost(hostInfo[0], Integer.parseInt(hostInfo[1]));
}).toArray(HttpHost[]::new);
RestClientBuilder restClientBuilder = RestClient.builder(httpHosts);
// 设置连接超时、读取超时、请求超时时间
restClientBuilder.setRequestConfigCallback(requestConfigBuilder -> {
requestConfigBuilder.setConnectTimeout(10000);
requestConfigBuilder.setSocketTimeout(30000);
requestConfigBuilder.setConnectionRequestTimeout(10000);
return requestConfigBuilder;
});
// 设置访问es的用户名密码、线程配置
restClientBuilder.setHttpClientConfigCallback(httpClientBuilder -> {
httpClientBuilder
// 设置用户名密码
.setDefaultCredentialsProvider(credentialsProvider)
// 配置IO线程
.setDefaultIOReactorConfig(IOReactorConfig.custom()
.setIoThreadCount(200)
.setSoTimeout(10000)
.setConnectTimeout(10000)
.build()
);
return httpClientBuilder;
});
return new RestHighLevelClient(restClientBuilder);
}
}
测试
package com.example.demo;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
@Slf4j
@Service("esService")
public class EsServiceImpl implements EsServiceI {
@Resource
private RestHighLevelClient restClient;
@Override
public void esApiTest() {
try {
GetRequest request = new GetRequest("zhitongche_audio", "audio", "1");
GetResponse response = restClient.get(request);
System.out.println(response.getSourceAsString());
} catch (Exception e) {
log.error("Exception Info: {}", e);
}
}
@PostConstruct
public void init() {
esApiTest();
}
}