`

Spring Boot整合ElasticSearch单/多集群案例

阅读更多
Spring Boot整合ElasticSearch单个集群和多个集群案例分享,本文涉及内容:
  • 导入spring boot elasticsearch starter
  • 单个es集群案例
  • 多个es集群案例

本文内容适合于:
  • spring boot 1.x,2.x
  • elasticsearch 1.x,2.x,5.x,6.x,+

1.导入spring boot elasticsearch starter
在spring boot项目中导入spring boot elasticsearch starter

maven工程
        <dependency>
            <groupId>com.bbossgroups.plugins</groupId>
            <artifactId>bboss-elasticsearch-spring-boot-starter</artifactId>
            <version>5.2.5</version>
        </dependency>

gradle工程
compile "com.bbossgroups.plugins:bboss-elasticsearch-spring-boot-starter:5.2.5"

2.创建spring boot启动类
新建Application类:
package org.bboss.elasticsearchtest.springboot;


import org.frameworkset.elasticsearch.ElasticSearchHelper;
import org.frameworkset.elasticsearch.client.ClientInterface;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

/**
 *  @author yinbp [122054810@qq.com]
 *  
 */

@SpringBootApplication

public class Application {

    private Logger logger = LoggerFactory.getLogger(Application.class);

   
    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }
}

Application类中定义了一个main方法用来启动spring boot elasticsearch测试应用。

Application类将被用于启动下面两个测试用例:
  • 单es集群测试用例
  • 多es集群测试用例

定义elasticsearch rest client组件实列管理类ServiceApiUtil:
package org.bboss.elasticsearchtest.springboot;
/*
 *  Copyright 2008 biaoping.yin
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

import org.frameworkset.elasticsearch.ElasticSearchHelper;
import org.frameworkset.elasticsearch.client.ClientInterface;
import org.springframework.stereotype.Service;

/**
 * 管理es rest client组件实例
 */
@Service
public class ServiceApiUtil {


   /**
    * 获取操作默认的es集群的客户端工具组件
    * @return
    */
   public ClientInterface restClient(){
      return  ElasticSearchHelper.getRestClientUtil();
   }

   /**
    * 获取操作默认的es集群的加载dsl配置文件的客户端工具组件
    * @return
    */
   public ClientInterface restDemoConfigClient(){
      return  ElasticSearchHelper.getConfigRestClientUtil("esmapper/demo.xml");
   }

   /**
    * 获取操作logs的es集群的客户端工具组件
    * @return
    */
   public ClientInterface restClientLogs(){
      return  ElasticSearchHelper.getRestClientUtil("logs");
   }
   /**
    * 获取操作logs的es集群的加载dsl配置文件的客户端工具组件
    * @return
    */
   public ClientInterface restConfigClientLogs(){
      return  ElasticSearchHelper.getConfigRestClientUtil("logs","esmapper/demo.xml");
   }
}

实列管理类ServiceApiUtil将被注入到后续的测试用例中。

3.单es集群配置和使用
3.1 配置单es集群
修改spring boot配置文件application.properties内容(yml格式配置文件参考下面的内容配置):
##ES集群配置
spring.elasticsearch.bboss.elasticUser=elastic
spring.elasticsearch.bboss.elasticPassword=changeme

#elasticsearch.rest.hostNames=10.1.236.88:9200
#elasticsearch.rest.hostNames=127.0.0.1:9200
#elasticsearch.rest.hostNames=10.21.20.168:9200
spring.elasticsearch.bboss.elasticsearch.rest.hostNames=10.21.20.168:9200
#elasticsearch.rest.hostNames=10.180.211.27:9280,10.180.211.27:9281,10.180.211.27:9282
spring.elasticsearch.bboss.elasticsearch.dateFormat=yyyy.MM.dd
spring.elasticsearch.bboss.elasticsearch.timeZone=Asia/Shanghai
spring.elasticsearch.bboss.elasticsearch.ttl=2d
#在控制台输出脚本调试开关showTemplate,false关闭,true打开,同时log4j至少是info级别
spring.elasticsearch.bboss.elasticsearch.showTemplate=true
spring.elasticsearch.bboss.elasticsearch.discoverHost=false
# dsl配置文件热加载扫描时间间隔,毫秒为单位,默认5秒扫描一次,<= 0时关闭扫描机制
spring.elasticsearch.bboss.dslfile.refreshInterval = -1

##es client http连接池配置
spring.elasticsearch.bboss.http.timeoutConnection = 400000
spring.elasticsearch.bboss.http.timeoutSocket = 400000
spring.elasticsearch.bboss.http.connectionRequestTimeout=400000
spring.elasticsearch.bboss.http.retryTime = 1
spring.elasticsearch.bboss.http.maxLineLength = -1
spring.elasticsearch.bboss.http.maxHeaderCount = 200
spring.elasticsearch.bboss.http.maxTotal = 400
spring.elasticsearch.bboss.http.defaultMaxPerRoute = 200
spring.elasticsearch.bboss.http.soReuseAddress = false
spring.elasticsearch.bboss.http.soKeepAlive = false
spring.elasticsearch.bboss.http.timeToLive = 3600000
spring.elasticsearch.bboss.http.keepAlive = 3600000
spring.elasticsearch.bboss.http.keystore =
spring.elasticsearch.bboss.http.keyPassword =
# ssl 主机名称校验,是否采用default配置,
# 如果指定为default,就采用DefaultHostnameVerifier,否则采用 SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER
spring.elasticsearch.bboss.http.hostnameVerifier =

## 数据库数据源配置,使用db-es数据导入功能时需要配置
#spring.elasticsearch.bboss.db.name = test
#spring.elasticsearch.bboss.db.user = root
#spring.elasticsearch.bboss.db.password = 123456
#spring.elasticsearch.bboss.db.driver = com.mysql.jdbc.Driver
#spring.elasticsearch.bboss.db.url = jdbc:mysql://localhost:3306/bboss
#spring.elasticsearch.bboss.db.usePool = false
#spring.elasticsearch.bboss.db.validateSQL = select 1


单ES集群配置项都是以spring.elasticsearch.bboss开头。

3.2 单集群测试用例
编写es单集群测试用例BBossESStarterTestCase
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.bboss.elasticsearchtest.springboot;


import org.frameworkset.elasticsearch.client.ClientInterface;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * 单集群演示功能测试用例,spring boot配置项以spring.elasticsearch.bboss开头
 * 对应的配置文件为application.properties文件
 * @author  yinbp [122054810@qq.com]
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class BBossESStarterTestCase {
	 
    @Test
    public void testBbossESStarter() throws Exception {
//        System.out.println(bbossESStarter);

		//验证环境,获取es状态
		String response = serviceApiUtil.restClient().executeHttp("_cluster/state?pretty",ClientInterface.HTTP_GET);

		System.out.println(response);
		//判断索引类型是否存在,false表示不存在,正常返回true表示存在
		boolean exist = serviceApiUtil.restClient().existIndiceType("twitter","tweet");

		//判读索引是否存在,false表示不存在,正常返回true表示存在
		exist = serviceApiUtil.restClient().existIndice("twitter");

		exist = serviceApiUtil.restClient().existIndice("agentinfo");

    }


}

直接通过junit运行上述测试用例即可

4.多ES集群测试用例
4.1 配置多es集群
修改spring boot配置文件application-multi-datasource.properties,内容如下:
##多集群配置样例,如果需要做多集群配置,请将参照本文内容修改application.properties文件内容
spring.elasticsearch.bboss.default.name = default
##default集群配配置
spring.elasticsearch.bboss.default.elasticUser=elastic
spring.elasticsearch.bboss.default.elasticPassword=changeme

#elasticsearch.rest.hostNames=10.1.236.88:9200
#elasticsearch.rest.hostNames=127.0.0.1:9200
spring.elasticsearch.bboss.default.elasticsearch.rest.hostNames=10.21.20.168:9200
#elasticsearch.rest.hostNames=10.180.211.27:9280,10.180.211.27:9281,10.180.211.27:9282
spring.elasticsearch.bboss.default.elasticsearch.dateFormat=yyyy.MM.dd
spring.elasticsearch.bboss.default.elasticsearch.timeZone=Asia/Shanghai
spring.elasticsearch.bboss.default.elasticsearch.ttl=2d
#在控制台输出脚本调试开关showTemplate,false关闭,true打开,同时log4j至少是info级别
spring.elasticsearch.bboss.default.elasticsearch.showTemplate=true
spring.elasticsearch.bboss.default.elasticsearch.discoverHost=false

##default连接池配置
spring.elasticsearch.bboss.default.http.timeoutConnection = 400000
spring.elasticsearch.bboss.default.http.timeoutSocket = 400000
spring.elasticsearch.bboss.default.http.connectionRequestTimeout=400000
spring.elasticsearch.bboss.default.http.retryTime = 1
spring.elasticsearch.bboss.default.http.maxLineLength = -1
spring.elasticsearch.bboss.default.http.maxHeaderCount = 200
spring.elasticsearch.bboss.default.http.maxTotal = 400
spring.elasticsearch.bboss.default.http.defaultMaxPerRoute = 200
spring.elasticsearch.bboss.default.http.keystore =
spring.elasticsearch.bboss.default.http.keyPassword =
# ssl 主机名称校验,是否采用default配置,
# 如果指定为default,就采用DefaultHostnameVerifier,否则采用 SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER
spring.elasticsearch.bboss.default.http.hostnameVerifier =

##logs集群配置
spring.elasticsearch.bboss.logs.name = logs
spring.elasticsearch.bboss.logs.elasticUser=elastic
spring.elasticsearch.bboss.logs.elasticPassword=changeme

#elasticsearch.rest.hostNames=10.1.236.88:9200
spring.elasticsearch.bboss.logs.elasticsearch.rest.hostNames=127.0.0.1:9200
#elasticsearch.rest.hostNames=10.21.20.168:9200
#elasticsearch.rest.hostNames=10.180.211.27:9280,10.180.211.27:9281,10.180.211.27:9282
spring.elasticsearch.bboss.logs.elasticsearch.dateFormat=yyyy.MM.dd
spring.elasticsearch.bboss.logs.elasticsearch.timeZone=Asia/Shanghai
spring.elasticsearch.bboss.logs.elasticsearch.ttl=2d
#在控制台输出脚本调试开关showTemplate,false关闭,true打开,同时log4j至少是info级别
spring.elasticsearch.bboss.logs.elasticsearch.showTemplate=true
spring.elasticsearch.bboss.logs.elasticsearch.discoverHost=false

##logs集群对应的连接池配置
spring.elasticsearch.bboss.logs.http.timeoutConnection = 400000
spring.elasticsearch.bboss.logs.http.timeoutSocket = 400000
spring.elasticsearch.bboss.logs.http.connectionRequestTimeout=400000
spring.elasticsearch.bboss.logs.http.retryTime = 1
spring.elasticsearch.bboss.logs.http.maxLineLength = -1
spring.elasticsearch.bboss.logs.http.maxHeaderCount = 200
spring.elasticsearch.bboss.logs.http.maxTotal = 400
spring.elasticsearch.bboss.logs.http.defaultMaxPerRoute = 200
# https证书配置
spring.elasticsearch.bboss.logs.http.keystore =
spring.elasticsearch.bboss.logs.http.keyPassword =
# ssl 主机名称校验,是否采用default配置,
# 如果指定为default,就采用DefaultHostnameVerifier,否则采用 SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER
spring.elasticsearch.bboss.logs.http.hostnameVerifier =
# dsl配置文件热加载扫描时间间隔,毫秒为单位,默认5秒扫描一次,<= 0时关闭扫描机制
spring.elasticsearch.bboss.dslfile.refreshInterval = -1

配置说明:

上面配置了两个集群:default和logs

每个集群配置项的前缀为:spring.elasticsearch.bboss.集群名字,其中的集群名字是一个自定义的逻辑名称,用来在client api中引用集群。

default集群的配置项前缀为:

spring.elasticsearch.bboss.default
logs集群的配置项前缀为:

spring.elasticsearch.bboss.logs
同时每个集群的配置项目里面必须包含name项目的配置

default集群name配置:

spring.elasticsearch.bboss.default.name = default
logs集群name配置:

##logs集群配置
spring.elasticsearch.bboss.logs.name = logs
4.2 定义加载多es集群配置的spring boot Configuration类
新建类MultiESSTartConfigurer
package org.bboss.elasticsearchtest.springboot;
/*
 *  Copyright 2008 biaoping.yin
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

import org.frameworkset.elasticsearch.ElasticSearchHelper;
import org.frameworkset.elasticsearch.boot.BBossESStarter;
import org.frameworkset.elasticsearch.client.ClientInterface;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;

/**
 * 配置多个es集群
 * 指定多es数据源profile:multi-datasource
 */
@Configuration
@Profile("multi-datasource") 
public class MultiESSTartConfigurer {
	@Primary
	@Bean(initMethod = "start")
	@ConfigurationProperties("spring.elasticsearch.bboss.default")
	public BBossESStarter bbossESStarterDefault(){
		return new BBossESStarter();

	}

	@Bean(initMethod = "start")
	@ConfigurationProperties("spring.elasticsearch.bboss.logs")
	public BBossESStarter bbossESStarterLogs(){
		return new BBossESStarter();

	}

}

说明:

MultiESSTartConfigurer通过以下两个方法分别加载default和logs两个es集群的配置

default集群配置加载
@Primary
@Bean(initMethod = "start")
@ConfigurationProperties("spring.elasticsearch.bboss.default")
public BBossESStarter bbossESStarterDefault()
logs集群配置加载

@Bean(initMethod = "start")
@ConfigurationProperties("spring.elasticsearch.bboss.logs")
public BBossESStarter bbossESStarterLogs()

4.3 定义多es集群测试用例
多es集群测试用例MultiBBossESStartersTestCase
package org.bboss.elasticsearchtest.springboot;


import org.frameworkset.elasticsearch.client.ClientInterface;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * 多集群演示功能测试用例,spring boot配置项以spring.elasticsearch.bboss.集群名称开头,例如:
 * spring.elasticsearch.bboss.default 默认es集群
 * spring.elasticsearch.bboss.logs  logs es集群
 * 两个集群通过 org.bboss.elasticsearchtest.springboot.MultiESSTartConfigurer加载
 * 对应的配置文件为application-multi-datasource.properties文件
 * 通过ActiveProfiles指定并激活多es集群配置:multi-datasource 
 * @author yinbp [122054810@qq.com]
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@ActiveProfiles("multi-datasource")
public class MultiBBossESStartersTestCase {

    @Test
    public void testMultiBBossESStarters() throws Exception {

		//验证环境,获取es状态
		String response = serviceApiUtil.restClient().executeHttp("_cluster/state?pretty",ClientInterface.HTTP_GET);
		System.out.println(response);


		//判断索引类型是否存在,false表示不存在,正常返回true表示存在
		boolean exist = serviceApiUtil.restClientLogs().existIndiceType("twitter","tweet");
		System.out.println("twitter/tweet:"+exist);
		//判读索引是否存在,false表示不存在,正常返回true表示存在
		exist = serviceApiUtil.restClientLogs().existIndice("twitter");
		System.out.println("twitter:"+exist);
		exist = serviceApiUtil.restClientLogs().existIndice("agentinfo");
		System.out.println("agentinfo:"+exist);
    }


}

直接通过junit运行上述测试用例即可。

5.完整的demo工程
https://gitee.com/bbossgroups/eshelloword-spring-boot-starter

https://github.com/bbossgroups/eshelloword-spring-boot-starter

6 开发交流
elasticsearch技术交流群:166471282

elasticsearch微信公众号:

The best elasticsearch highlevel java rest api-----bboss 
1
0
分享到:
评论

相关推荐

    spring boot 整合 elasticsearch

    接下来,配置Spring Boot应用以连接到Elasticsearch集群。在application.properties或application.yml文件中,设置Elasticsearch的地址、端口等信息: ```properties # application.properties 示例 spring.data....

    Spring Boot整合ElasticSearch实现多版本兼容的方法详解

    在本文中,我们将深入探讨如何在Spring Boot应用中整合Elasticsearch,并实现多版本兼容。Elasticsearch是一个强大的全文搜索引擎,常用于处理大量结构化数据的检索和分析。它基于Apache Lucene,提供了RESTful API...

    springboot整合ElasticSearch集群

    springboot 2.0.2集成elasticsearch5.5.1,并使用集群模式,亲测可用!!!

    Spring Boot 集成 ElasticSearch.docx

    Spring Boot集成ElasticSearch是将流行的搜索引擎Elasticsearch与Spring Boot框架相结合,简化了开发过程,使得开发者可以快速地在应用程序中使用Elasticsearch的功能。本文将详细介绍如何在Spring Boot项目中集成...

    Spring Boot elasticsearch7.6.2基础操作:创建索引、新增数据、查询数据

    在本文中,我们将深入探讨如何使用Spring Boot与Elasticsearch 7.6.2进行基本操作,包括创建索引、添加数据以及查询数据。Elasticsearch是一个强大的分布式搜索引擎,而Spring Boot是Java开发中的轻量级框架,两者...

    spring-boot-elasticsearch v1.0.zip

    《Spring Boot与Elasticsearch深度整合实践》 在当今大数据时代,实时搜索和数据分析成为企业不可或缺的功能。Spring Boot作为Java领域最受欢迎的微服务框架之一,以其简洁的配置和快速开发特性受到开发者们的青睐...

    spring-boot-elasticsearch-master.zip

    三、Spring Boot整合Elasticsearch步骤 1. 添加依赖:在`pom.xml`文件中添加Spring Data Elasticsearch和Elasticsearch的依赖。 2. 配置Elasticsearch:在`application.properties`或`application.yml`中配置...

    elasticsearch 2.4.6 版 与Spring boot 打他 完美支持

    Spring Boot可以通过配置实现负载均衡和故障转移,确保应用在多节点Elasticsearch集群中的稳定运行。Elasticsearch的副本机制则可以提高数据的耐久性和可用性。 同时,Elasticsearch 2.4.6版本的更新可能包括对性能...

    springboot整合bboss es增删改查测试demo代码

    本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...

    elasticsearch:基于springboot整合bboss es实现的demo项目

    本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...

    springboot - 2.7.3版本 - (五)整合Elasticsearch+Logstash+Kibana(ELK)

    1. **配置Elasticsearch**:在Spring Boot应用中,添加Spring Data Elasticsearch依赖并配置Elasticsearch连接信息,包括集群名称、节点地址等。 2. **设置日志框架**:选择Logback或Log4j2作为日志框架,并配置其...

    elasticsearch整合Spring用例

    在Java开发领域,Elasticsearch和Spring Data的整合是一个常见的需求,用于实现高效、可扩展的全文搜索引擎功能。本文将详细讲解如何将Elasticsearch与Spring Data结合使用,包括所需的坐标(依赖)、示例代码以及...

    springboot集成es7.9.1及实现es用户登录

    在本文中,我们将深入探讨如何将Spring Boot与Elasticsearch(ES)7.9.1版本集成,并实现ES用户登录功能。Spring Boot以其简洁的配置和强大的自动化配置能力,为开发人员提供了便捷的方式来构建微服务应用,而...

    Java的Spring Boot 集成 Elasticsearch 使用详解.docx

    以上就是使用 Spring Boot 集成 Elasticsearch 的基本步骤,包括添加依赖、配置参数、创建客户端、定义实体类、设置 Repository 以及进行数据操作。这只是一个基础的集成示例,实际项目中可能还需要考虑更多复杂情况...

    springboot整合elasticsearch.md

    ### Spring Boot 整合 Elasticsearch 实践 #### 一、Elasticsearch Java 客户端概述 Elasticsearch 提供了多种 Java 客户端来满足不同的需求,它们各有优势和局限性。 - **Java Low Level REST Client** - **...

    Spring boot+ES5.4+logback+maven 一个框架空工程

    在 Spring Boot 中集成 Elasticsearch 可以方便地实现日志搜索、复杂查询功能以及数据分析。 Logback 是一个日志框架,它是 log4j 的升级版,由 Ceki Gülcü 创建。Logback 提供了更高的性能和更丰富的特性,包括...

    spring-data-elasticsearch

    `spring-data-elasticsearch-sample-application-master` 是一个包含整合示例的项目,它展示了如何在实际应用中使用 Spring Data Elasticsearch。这个项目可能包含了以下部分: 1. **配置**: 应用的配置文件(如 `...

    Spring Boot集成ElasticSearch实现搜索引擎的示例

    配置完成后,Spring Boot会自动连接到默认的9300端口,与ElasticSearch集群通信。 2.2 利用Restful API与ElasticSearch的9200端口集成(Jest方式):这种方式更灵活,可以直接通过发送HTTP请求来操作ElasticSearch...

    spring-boot-starter-data-elasticsearch 2.5.7 的增删改查用法

    在本文中,我们将深入探讨如何使用`spring-boot-starter-data-elasticsearch` 2.5.7版本进行Elasticsearch的增删改查操作。Elasticsearch是一个强大的分布式、开源的全文搜索引擎,而Spring Boot框架提供了方便快捷...

Global site tag (gtag.js) - Google Analytics