版本对应关系
elasticsearch:5.6.0
springboot:1.5.6
es依赖配置
UTF-8 UTF-8 1.8 5.6.0 org.elasticsearch.client transport ${elasticsearch.version} org.apache.logging.log4j log4j-core 2.7
es配置
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;/** * @author WangXH * @version V1.0 * @Package com.wangxh.elasticsearch.esstudy.config * @date 2017-09-18 2017-9-18 13:29 * @Description: ElasticSearch 5.6 配置 */@Configurationpublic class ElasticSearchConfig implements FactoryBean, InitializingBean, DisposableBean { private Logger logger= LoggerFactory.getLogger(this.getClass()); //由于项目从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 getObjectType() { return TransportClient.class; } @Override public boolean isSingleton() { return false; } @Override public void afterPropertiesSet() throws Exception { logger.info(clusterName+" "+clusterNodes); this.initClient(); } private void initClient() { 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; }}
在application.yml文件中配置es的连接信息:
spring: data: elasticsearch: cluster-name: es-test cluster-nodes: 192.168.1.126:9300
9300是es的默认socket端口号,如果配置了多个es的slave,这里的cluster-nodes 其实也只用配置master的ip:port就可以,因为在配置中有:client.transport.sniff,true。
总结:在集成es到springboot的步骤有以下几点
- 添加es的依赖以及es的日志依赖
- 创建一个es的配置文件读取es连接配置,并初始化TransportClient