spring boot 集成 elasticsearch 5.x

来源:互联网 发布:nba2k17麦迪捏脸数据 编辑:程序博客网 时间:2024/06/05 14:23

目录

      • 目录
        • 项目环境
        • mavan 配置 pomxml
          • 特注
        • application-devyml
        • 配置 java Client连接池
        • 参考文献

项目环境:

  • jdk 1.8
  • spring boot 1.5.1

由于spring boot 目前SpringBoot 1.5.1.RELEASE和Spring Data Elasticsearch 2.10.RELEASE仅支持ElasticSearch 2.4.0。 
他们不支持最新版本的ElasticSearch 5.x版本。

Spring Boot Version (x)Spring Data Elasticsearch Version (y)Elasticsearch Version (z)x <= 1.3.5y <= 1.3.4z <= 1.7.2*x >= 1.4.x2.0.0 <=y < 5.0.0**2.0.0 <= z < 5.0.0**

mavan 配置 pom.xml

   <!-- 版本控制  -->    <properties>            <log4j-api.version>2.8.2</log4j-api.version>            <log4j-core.version>2.8.2</log4j-core.version>            <elasticsearch.version>5.4.1</elasticsearch.version>            <transport.version>5.4.1</transport.version>    </properties>    <!-- elasticsearch 5.x 依赖 -->     <dependencies>       <dependency>           <groupId>org.apache.logging.log4j</groupId>           <artifactId>log4j-api</artifactId>           <version>${log4j-api.version}</version>       </dependency>       <dependency>           <groupId>org.apache.logging.log4j</groupId>           <artifactId>log4j-core</artifactId>           <version>${log4j-core.version}</version>       </dependency>       <dependency>           <groupId>org.elasticsearch</groupId>           <artifactId>elasticsearch</artifactId>           <version>${elasticsearch.version}</version>       </dependency>       <dependency>           <groupId>org.elasticsearch.client</groupId>           <artifactId>transport</artifactId>           <version>${transport.version}</version>       </dependency>   </dependencies> 
: 特注
 ElasticSearch 5.x 根据官网配置maven 依赖, 由于 5.0x的 jar 内部使用的 apache log4日志。 所以要配置额外的依赖支持 org.apache.logging.log4j。

application-dev.yml

spring:     data:   elasticsearch:        cluster-name: elasticsearch        cluster-nodes: 127.0.0.1:9300

配置 java Client连接池

package com.****.****.config;import com.****.****.common.utils.StringUtils;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.transport.InetSocketTransportAddress;import org.elasticsearch.transport.client.PreBuiltTransportClient;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.FactoryBean;import org.springframework.beans.factory.InitializingBean;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Configuration;import java.net.InetAddress;import java.net.UnknownHostException;/** *TransportClientFactoryBean * * @author  */@Configurationpublic class ElasticsearchConfiguration implements FactoryBean<TransportClient>, InitializingBean, DisposableBean {    private static final Logger logger = LoggerFactory.getLogger(ElasticsearchConfiguration.class);    //由于项目从2.2.4配置的升级到 5.4.1版本 原配置文件不想动还是指定原来配置参数    @Value("${spring.data.elasticsearch.cluster-nodes}")    private String clusterNodes ;    @Value("${spring.data.elasticsearch.cluster-name}")    private String clusterName;    private TransportClient client;    @Override    public void destroy() throws Exception {        try {            logger.info("Closing elasticSearch client");            if (client != null) {                client.close();            }        } catch (final Exception e) {            logger.error("Error closing ElasticSearch client: ", e);        }    }    @Override    public TransportClient getObject() throws Exception {        return client;    }    @Override    public Class<TransportClient> getObjectType() {        return TransportClient.class;    }    @Override    public boolean isSingleton() {        return false;    }    @Override    public void afterPropertiesSet() throws Exception {        buildClient();    }    protected void buildClient()  {        try {            PreBuiltTransportClient  preBuiltTransportClient = new PreBuiltTransportClient(settings());            if (!"".equals(clusterNodes)){                for (String nodes:clusterNodes.split(",")) {                    String InetSocket [] = nodes.split(":");                    String  Address = InetSocket[0];                    Integer  port = Integer.valueOf(InetSocket[1]);                    preBuiltTransportClient.addTransportAddress(new                                     InetSocketTransportAddress(InetAddress.getByName(Address),port ));                }                client = preBuiltTransportClient;            }        } catch (UnknownHostException e) {            logger.error(e.getMessage());        }    }    /**     * 初始化默认的client     */    private Settings settings(){        Settings settings = Settings.builder()            .put("cluster.name",clusterName)             .put("client.transport.sniff",true)            build();        client = new PreBuiltTransportClient(settings);        return settings;    }

}

参考文献

[1] : https://www.mkyong.com/spring-boot/spring-boot-spring-data-elasticsearch-example/

原创粉丝点击