频道栏目
首页 > 资讯 > 其他 > 正文

Springboot中集成ElasticSearch基础知识小案例

18-07-28        来源:[db:作者]  
收藏   我要投稿

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

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


    org.elasticsearch.client
    transport
    6.2.2

    org.elasticsearch
    elasticsearch
    6.2.2

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 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代码结构设计,然后写具体的增删改查命令了。

相关TAG标签
上一篇:向前辈致敬!FastDFS分布式文件系统浅谈
下一篇:C++的单例模式的几种实现方式解析
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站