Springboot中集成ElasticSearch

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhiqiang0316/article/details/81210774

昨天给大家介绍了一下ElasticSearch代码结构设计,今天给大家介绍一下ElasticSearch怎么集成到Spring boot中,不知道大家记不记得以前我也写过它们的整合,但今天要说的模式和以前的不一样(具体区别大家可以对照的看看,这边就不详细介绍了)。

1.我们首先引入ElasticSearch的相关依赖,pom文件的依赖如下所示:

<!-- elasticsearch  client依赖 -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>6.2.2</version>
</dependency>

<!-- elasticsearch依赖 -->
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>6.2.2</version>
</dependency>

2.然后再配置文件中配置ElasticSearch的相关配置,yml配置文件如下所示:

elasticsearch:
  cluster:
    name: my-application
  address: 192.168.11.24:9300

3.创建一个配置类(@Configuration),然后添加ElasticSearch相关的连接信息,配置类如下所示:

package com.infun.platform.es.config;

import org.apache.commons.lang.StringUtils;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

/**
 * Elasticsearch配置类
 * @author linzhiqiang
 * @date 2018/5/26
 * @since 1.0
 */

@Configuration
public class ElasticsearchConfig {
    private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchConfig.class);

    @Value("${elasticsearch.cluster.name}")
    private String clusterName;

    @Value("${elasticsearch.address}")
    private String address;

    @Bean
    public TransportClient getTransportClient() {
        try {
            // 设置集群名称,并自动嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中
            // settings
            Settings settings = Settings.builder().put("cluster.name", clusterName)
//                    .put("index.number_of_shards", 1)
//                    .put("index.number_of_replicas", 0)
                    .build();
            //地址列表
            List<TransportAddress> transportAddressList = new ArrayList<>();
            if (StringUtils.isNotBlank(address)) {
                String[] addresses = address.split(",");
                String[] hostAndPort = null;
                //组装地址
                for (String str : addresses) {
                    hostAndPort = str.split(":");
                    if (hostAndPort != null && hostAndPort.length > 1) {
                        transportAddressList.add(new TransportAddress(InetAddress.getByName(hostAndPort[0].trim()), Integer.valueOf(hostAndPort[1].trim())));
                    } else {
                        transportAddressList.add(new TransportAddress(InetAddress.getByName(hostAndPort[0].trim()), 9300));
                    }
                }
            }
            //转换
            TransportAddress[] transportAddresses = transportAddressList.toArray(new TransportAddress[transportAddressList.size()]);
            //返回连接
            return new PreBuiltTransportClient(settings).addTransportAddresses(transportAddresses);
        } catch (UnknownHostException e) {
            e.printStackTrace();
            LOGGER.error(e.getMessage());
        }
        return null;
    }
}

4.配置类搞定,我们就可以在service中注入TransportClient 的连接了,使用方式如下所示:

/**
 * TransportClient连接
 */
@Autowired
private TransportClient getTransportClient;

总结:

过程就是这样,这样的整合方式和之前的整合方式最大的区别就是,现在这种的只是将elasticsearch的配置信息放在yml配置文件中,elasticsearch代码风格还是一样的,但是spring-data-elasticsearch这种的就不一样了,它的代码风格就像JPA这种模式了,虽然封装的很好,但是很不灵活。两者之间各自有各自的优缺点吧,看具体应用场景适合什么。最后我们就可以结合上一节课讲到ElasticSearch代码结构设计,然后写具体的增删改查命令了。

想要更多干货、技术猛料的孩子,快点拿起手机扫码关注我,我在这里等你哦~

                                                       

猜你喜欢

转载自blog.csdn.net/linzhiqiang0316/article/details/81210774