ElasticsearchTemplate 替换为 ElasticsearchRestTemplat
(TransportClient 替换为 RestHighLevelClient)
ES 添加认证(鉴权)后,原先配置文件(application.properties)需要做些改动,试了一些在配置文件中增加 spring.elasticsearch.rest.xxx、spring.elasticsearch.jest.xxx 或 spring.data.elasticsearch.client.reactive.xxx 均不行。而且这里采用的是 http 请求,原先未认证使用的是 tcp 方式,
如果不改为 http 方式仍为 tcp 有个方法,使用 spring TransportClient 可以参考在配置文件添加如下:
spring.data.elasticsearch.cluster-name=xx
spring.data.elasticsearch.cluster-nodes=nodes.xxx.com:9300
spring.data.elasticsearch.properties[request.headers.Authorization]=Basic ${auth}
${auth}=base64(user:password)
该方法未实际验证。
pom 文件保持原先,不用改动,多啰嗦下,这里 org.springframework.boot 使用版本为 2.2.2.RELEASE,spring-boot-starter-data-elasticsearch 是跟着这个版本的,未单独设置,需要注意的是 org.elasticsearch 版本(6.8.5)要大于等于 ES 服务版本(6.7.0),
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
另种方法,是使用 RestHighLevelClient
1、pom 文件需要把 TransportClient 排除掉,以防还是走这个方式;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<exclusions>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
</exclusion>
</exclusions>
</dependency>
2、配置文件 application.properties 中添加字段
elasticsearch.gatewayIpPorts=xxxx:9200
elasticsearch.username=xxx
elasticsearch.password=xxx
3、添加配置类 RestClientConfig.java
import java.time.Duration;
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 org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
@Value(value = "${elasticsearch.gatewayIpPorts}")
private String gatewayIpPorts;
@Value(value = "${elasticsearch.username}")
private String username;
@Value(value = "${elasticsearch.password}")
private String password;
@Override
@Bean
public RestHighLevelClient elasticsearchClient() {
// 使用构建器来提供集群地址,设置默认值HttpHeaders或启用SSL
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
// 设置连接地址
.connectedTo(gatewayIpPorts)
// 可以设置多个地址
// .connectedTo("127.0.0.1:9200", "127.0.0.1:9201")
// 是否启用ssl
// .usingSsl()
// 设置连接超时时间
.withConnectTimeout(Duration.ofSeconds(10))
// 设置
.withSocketTimeout(Duration.ofSeconds(30))
// 设置用户名密码
.withBasicAuth(username, password)
// 创建连接信息
.build();
// 创建RestHighLevelClient
return RestClients.create(clientConfiguration).rest();
}
@Bean
public ElasticsearchRestTemplate restTemplate() throws Exception {
return new ElasticsearchRestTemplate(elasticsearchClient());
}
}
4、涉及到 ElasticsearchTemplate elasticsearchTemplate;需要改为 ElasticsearchRestTemplate elasticsearchTemplate;
注意:elasticsearchTemplate 不用修改。
通过以上步骤已完成替换,之前相关的 es 操作写法不会受到影响。