ElasticSerach6.8.1增加Xpack用户密码验证后JAVA后端代码改造

万丿小衫 2020-10-15 02:34:10
开始引用大佬 p-j-meisch 的解释:
About spring-data-elasticsearch:

when using ElasticsearchTemplate, you are using the TransportClient.
when using ElasticsearchRestTemplate you are using the RestClient (available in 3.2.0).
when using a default ElasticsearchRepository you are using the TransportClient.
when using a custom repository extending for example SimpleElasticsearchRepository like shown below you are using the RestClient.

解决的主要问题
1、将TransportClient替换为RestClient
2、将ElasticsearchTemplate替换为ElasticsearchRestTemplate;

一、pom.xml修改
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-data-elasticsearch</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<!-- need 3.2.0 for REST client-->
<exclusions>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
</exclusions>
<version>3.2.0.M2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.8.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.8.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.8.1</version>
</dependency>
将原来的spring-boot-starter-data-elasticsearch 修改为spring-data-elasticsearch,由于我们的es是6.8.1版本,我将对应的一些客户端jar版本也替换为6.8.1版本。
二、启动类增加@EnableElasticsearchRepositories
@EnableElasticsearchRepositories
public class DocServerApplication {
public static void main(String[] args) {
System.setProperty("es.set.netty.runtime.available.processors", "false");
SpringApplication.run(DocServerApplication.class, args);
}
}
三、application.yml增加es配置
es:
cluster:
name: my-application
user: elastic
password: elastic
url: 192.168.170.31
port: 9200
四、项目注入ES 将ElasticsearchRestTemplate 指定为elasticsearchTemplate,支持原来的jpa功能

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.client.HttpAsyncClientBuilder;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import javax.annotation.PostConstruct;

/**
* 项目注入ES
*/
@Configuration
@ConditionalOnClass(RestHighLevelClient.class)
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {
@PostConstruct
void init() {
System.setProperty("es.set.netty.runtime.available.processors", "false");
}



@Value("${es.cluster.name:#{null}}")
private String name;
@Value("${es.user:#{null}}")
private String user;
@Value("${es.password:#{null}}")
private String password;
@Value("${es.url:#{null}}")
private String url;
@Value("${es.port:#{null}}")
private int port;


@Override
@Bean("restHighLevelClient")
public RestHighLevelClient elasticsearchClient() {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
/*设置账号密码*/
credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(user, password));
/*创建rest client对象*/
RestClientBuilder builder = RestClient.builder(new HttpHost(url,port))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
RestHighLevelClient client = new RestHighLevelClient(builder);
return client;
}



@Bean("elasticsearchTemplate")
ElasticsearchRestTemplate elasticsearchRestTemplate(@Qualifier("restHighLevelClient") RestHighLevelClient client) {
return new ElasticsearchRestTemplate(client);
}

}



...全文
329 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧