springboot1.5.13集成Elasticsearch6.1

Posted ixan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot1.5.13集成Elasticsearch6.1相关的知识,希望对你有一定的参考价值。

由于公司业务需要,需要springboot整合elasticsearch6.1,之前在网上费了好大的劲的才整合好,在此记录下,楼主使用的版本是springboot1.5.13和ElasticSearch6.1.1,其他版本的同学可做参考!

本文使用官方推荐使用Java High Level REST Client,楼主也集成成功,故在此分享一下!

1.核心pom的xml,其他版本的同学请根据自己情况进行修改

 1     <parent>
 2         <groupId>org.springframework.boot</groupId>
 3         <artifactId>spring-boot-starter-parent</artifactId>
 4         <version>1.5.13.RELEASE</version>
 5         <relativePath/> <!-- lookup parent from repository -->
 6     </parent>
 7 
 8     <properties>
 9         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
10         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
11         <java.version>1.8</java.version>
12     </properties>
13 
14     <dependencies>
15         <dependency>
16             <groupId>org.springframework.boot</groupId>
17             <artifactId>spring-boot-starter-web</artifactId>
18         </dependency>
19         <dependency>
20             <groupId>org.springframework.boot</groupId>
21             <artifactId>spring-boot-starter-test</artifactId>
22         </dependency>
23         <dependency>
24             <groupId>org.springframework.boot</groupId>
25             <artifactId>spring-boot-devtools</artifactId>
26         </dependency>
27         <!-- Elasticsearch Dependencies -->
28         <dependency>
29             <groupId>org.elasticsearch</groupId>
30             <artifactId>elasticsearch</artifactId>
31             <version>6.1.1</version>
32         </dependency>
33         <dependency>
34             <groupId>org.elasticsearch.client</groupId>
35             <artifactId>elasticsearch-rest-high-level-client</artifactId>
36             <version>6.1.1</version>
37         </dependency>
38         <dependency>
39             <groupId>org.elasticsearch.client</groupId>
40             <artifactId>elasticsearch-rest-client</artifactId>
41             <version>6.1.1</version>
42         </dependency>
43         <dependency>
44             <groupId>org.elasticsearch.client</groupId>
45             <artifactId>elasticsearch-rest-client-sniffer</artifactId>
46             <version>6.1.1</version>
47         </dependency>
48         <!--日志组件-->
49         <dependency>
50             <groupId>org.apache.logging.log4j</groupId>
51             <artifactId>log4j-api</artifactId>
52             <version>2.8.2</version>
53         </dependency>
54         <dependency>
55             <groupId>org.apache.logging.log4j</groupId>
56             <artifactId>log4j-core</artifactId>
57             <version>2.8.2</version>
58         </dependency>
59         <!--gson组件-->
60         <dependency>
61             <groupId>com.google.code.gson</groupId>
62             <artifactId>gson</artifactId>
63             <version>2.8.2</version>
64         </dependency>
65         <!-- https://mvnrepository.com/artifact/javax.inject/javax.inject -->
66         <dependency>
67             <groupId>javax.inject</groupId>
68             <artifactId>javax.inject</artifactId>
69             <version>1</version>
70         </dependency>
71     </dependencies>

 

2.elasticsearch配置类 

 

 1 package cn.ixan.elasticstack.configuration;
 2 
 3 import org.apache.http.HttpHost;
 4 import org.elasticsearch.client.RestClient;
 5 import org.elasticsearch.client.RestHighLevelClient;
 6 import org.slf4j.Logger;
 7 import org.slf4j.LoggerFactory;
 8 import org.springframework.beans.factory.DisposableBean;
 9 import org.springframework.beans.factory.FactoryBean;
10 import org.springframework.beans.factory.InitializingBean;
11 import org.springframework.beans.factory.annotation.Value;
12 import org.springframework.context.annotation.Configuration;
13 
14 /**
15  * 不推荐使用elasticsearch spring-data
16  * 所以需要自己注入生成客户端
17  * 这个三个接口可以使用  AbstractFactoryBean  通过继承重写方法代替
18  * Created by [email protected] on 2018/6/16.
19  */
20 @Configuration
21 public class ElasticsearchConfiguration implements FactoryBean<RestHighLevelClient>, InitializingBean, DisposableBean {
22     private final Logger logger = LoggerFactory.getLogger(this.getClass());
23 
24     private RestHighLevelClient restHighLevelClient;
25     @Value("${spring.data.elasticsearch.cluster-nodes}")
26     private String clusterNodes;
27 
28 
29     /**
30      * 控制Bean的实例化过程
31      * @return
32      * @throws Exception
33      */
34     @Override
35     public RestHighLevelClient getObject() throws Exception {
36         return restHighLevelClient;
37     }
38     /**
39      * 获取接口返回的实例的class
40      * @return
41      */
42     @Override
43     public Class<?> getObjectType() {
44         return RestHighLevelClient.class;
45     }
46 
47     @Override
48     public void destroy() throws Exception {
49         try {
50             if(null != restHighLevelClient){
51                 restHighLevelClient.close();
52             }
53         } catch (final Exception e) {
54             logger.error("Error closing ElasticSearch client: ", e);
55         }
56     }
57 
58     @Override
59     public boolean isSingleton() {
60         return false;
61     }
62 
63     @Override
64     public void afterPropertiesSet() throws Exception {
65         restHighLevelClient = buildClient();
66     }
67 
68     private RestHighLevelClient buildClient() {
69         try {
70             restHighLevelClient = new RestHighLevelClient(
71                     RestClient.builder(
72                             new HttpHost(
73                                     clusterNodes.split(":")[0],
74                                     Integer.parseInt(clusterNodes.split(":")[1]),
75                                     "http")));
76         } catch (Exception e) {
77             logger.error(e.getMessage());
78         }
79         return restHighLevelClient;
80     }
81 }

 

3.application.properties
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9200

 

 4.测试

 1 package cn.ixan.elasticstack.controller;
 2 
 3 import org.elasticsearch.action.get.GetRequest;
 4 import org.elasticsearch.action.get.GetResponse;
 5 import org.elasticsearch.client.RestHighLevelClient;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.RestController;
 8 
 9 import javax.inject.Inject;
10 import java.io.IOException;
11 
12 @RestController
13 @RequestMapping("/elastic")
14 public class ElasticController {
15     @Inject
16     private RestHighLevelClient client;
17 
18     /**
19      * 测试查询文档
20      */
21     @RequestMapping("/fetchIndex")
22     public Object getIndexTest() {
23         GetRequest request = new GetRequest("magic", "employee", "1");
24         try {
25             GetResponse response = client.get(request);
26             System.out.println(response);
27             return request;
28         } catch (IOException e) {
29             e.printStackTrace();
30             return null;
31         }
32     }
33 
34 }

5.准备测试数据,这里楼主使用postman,其他同学可选择使用其他工具,测试数据类似如下,看不懂的请移步先学习ElasticSearch服务器开发(第二版)
curl -XPUT http://localhost:9200/magic/employee/1 -d ‘{"title": "New version of
Elasticsearch released!", content": "Version 1.0 released today!", "tags": ["announce",
"elasticsearch", "release"] }‘

 

6.浏览器测试
http://localhost:8080/elastic/fetchIndex

 

ok,如果到这里你可以查询到数据,那么你已经完成了springboot1.5集成ElasticSearch6.1

 



以上是关于springboot1.5.13集成Elasticsearch6.1的主要内容,如果未能解决你的问题,请参考以下文章

Elastic 7.16 版:精简的数据集成驱动重要的结果

Elastic 代理和 Fleet 让您更容易地将系统与 Elastic 集成

Elastic Agent 和 Fleet 可以更轻松地将你的系统与 Elastic 集成

Elastic Agent 和 Fleet 可以更轻松地将你的系统与 Elastic 集成

Spring Boot 集成Elastic Search 6.x

CodePipeline:如何将 ECR 与 Elastic Beanstalk 集成?