赞
踩
使用Restful风格文档,注意选择对应的版本
使用高级客户端
SpringBoot默认整合的是elasticsearch的6.8.6版本,因此需要修改依赖的版本信息为当前elasticsearch对应的版本 ,即spring-boot-starter-data-elasticsearch的依赖中已经引入了elasticsearch-rest-high-level-client依赖,因此只需要修改相关的版本即可
pom文件相关配置:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com._520xuzai.es7</groupId> <artifactId>elasticsearch7</artifactId> <version>0.0.1-SNAPSHOT</version> <name>elasticsearch7</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <elasticsearch.version>7.10.0</elasticsearch.version> <swagger.version>1.9.1.RELEASE</swagger.version> <commons-lang3.version>3.11</commons-lang3.version> <fastjson.version>1.1.40</fastjson.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- SpringBoot与elasticsearch整合的相关依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- swagger --> <dependency> <groupId>com.spring4all</groupId> <artifactId>swagger-spring-boot-starter</artifactId> <version>${swagger.version}</version> </dependency> <!--String Utils--> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <!--fastjson--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
相关配置如下:
server: port: 8080 #spring spring: application: name: springboot-elasticsearch elasticsearch: address: 192.168.225.145:9200,192.168.225.145:9201,192.168.225.145:9202 username: elastic password: 123456 schema: http connectTimeout: 5000 socketTimeout: 5000 connectionRequestTimeout: 5000 maxConnectNum: 100 maxConnectPerRoute: 100
ElasticsearchRuntimeEnvironment.java
读取 application 中的配置信息
package com._520xuzai.es7.conf.esbase; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * \* Created with IntelliJ IDEA. * \* User: 煦仔 * \* Date: 2020-12-22 * \* Time: 11:01 * \* To change this template use File | Settings | File Templates. * \* Description: ElasticSearch 配置 * \ */ @Setter @Getter @AllArgsConstructor @NoArgsConstructor @Component @ConfigurationProperties(prefix = "elasticsearch") @ConditionalOnProperty("elasticsearch.address") public class ElasticsearchRuntimeEnvironment { /** * es连接地址,如果有多个用,隔开 */ private String address; /** * es用户名 */ private String username; /** * es密码 */ private String password; /** * 协议 */ private String scheme; /** * 连接超时时间 */ private int connectTimeout; /** * Socket 连接超时时间 */ private int socketTimeout; /** * 获取连接的超时时间 */ private int connectionRequestTimeout; /** * 最大连接数 */ private int maxConnectNum; /** * 最大路由连接数 */ private int maxConnectPerRoute; }
package com._520xuzai.es7.conf; import com._520xuzai.es7.conf.esbase.ElasticsearchRuntimeEnvironment; import org.apache.commons.lang3.StringUtils; 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.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.ArrayList; import java.util.List; /** * \* Created with IntelliJ IDEA. * \* User: 煦仔 * \* Date: 2020-12-22 * \* Time: 9:40 * \* To change this template use File | Settings | File Templates. * \* Description: * \ */ @Configuration public class ElasticsearchConfig { @Autowired(required = false) private ElasticsearchRuntimeEnvironment esRuntimeEnvironment; @Bean //当前es相关的配置存在则实例化RestHighLevelClient,如果不存在则不实例化RestHighLevelClient @ConditionalOnBean(value = ElasticsearchRuntimeEnvironment.class) public RestHighLevelClient restHighLevelClient(){ //es地址,以逗号分隔 String nodes = esRuntimeEnvironment.getAddress(); nodes = nodes.contains("http://") ? nodes.replace("http://","") : nodes; //es密码 String password = esRuntimeEnvironment.getPassword(); String scheme = esRuntimeEnvironment.getScheme(); List<HttpHost> httpHostList = new ArrayList(); //拆分es地址 for(String address : nodes.split(",")){ int index = address.lastIndexOf(":"); httpHostList.add(new HttpHost(address.substring(0, index),Integer.parseInt(address.substring(index + 1)),scheme)); } //转换成 HttpHost 数组 HttpHost[] httpHosts = httpHostList.toArray(new HttpHost[httpHostList.size()]); //构建连接对象 RestClientBuilder builder = RestClient.builder(httpHosts); //使用账号密码连接 if ( StringUtils.isNotEmpty(password)){ String username = esRuntimeEnvironment.getUsername(); CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider .setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(username,password)); builder.setHttpClientConfigCallback(f->f.setDefaultCredentialsProvider(credentialsProvider)); } // 异步连接延时配置 builder.setRequestConfigCallback(requestConfigBuilder -> { requestConfigBuilder.setConnectTimeout(esRuntimeEnvironment.getConnectTimeout()); requestConfigBuilder.setSocketTimeout(esRuntimeEnvironment.getSocketTimeout()); requestConfigBuilder.setConnectionRequestTimeout(esRuntimeEnvironment.getConnectionRequestTimeout()); return requestConfigBuilder; }); // 异步连接数配置 builder.setHttpClientConfigCallback(httpClientBuilder -> { httpClientBuilder.setMaxConnTotal(esRuntimeEnvironment.getMaxConnectNum()); httpClientBuilder.setMaxConnPerRoute(esRuntimeEnvironment.getMaxConnectPerRoute()); return httpClientBuilder; }); return new RestHighLevelClient(builder); } }
至此ElasticSearch 连接配置已经基本完成。
为便于后续操作,我们同时进行了swagger
的相关配置
package com._520xuzai.es7.conf; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** * \* Created with IntelliJ IDEA. * \* User: 煦仔 * \* Date: 2020-12-22 * \* Time: 10:52 * \* To change this template use File | Settings | File Templates. * \* Description: * \ */ @EnableSwagger2 @Configuration public class Swagger2Config { //访问地址:http://ip:port/swagger-ui.html @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com._520xuzai.es7")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("搜索Api接口文档") .version("1.0") .build(); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。