SpringBoot整合ElasticSearch详细过程

SpringBoot整合ElasticSearch详细过程一、创建工程使用IntelliJ创建SpringBoot工程SpringBoot版本为2.0.4ElasticSearch为5.6.10删掉蓝框中的文件(如上)最后我们的目录结构(如下)下面pom文件主要修改的是把springboot从IntelliJ默认的版本换成2.0.4以及添加netty3的客户端否则启动会报错<?xmlversion=…

大家好,又见面了,我是你们的朋友全栈君。

首先呢 在整合之前我们需要安装ElasticSearch 可以参照之前博主的文章

Windows环境下安装ES

一、创建工程

使用IntelliJ创建SpringBoot工程 SpringBoot版本为2.0.4 ElasticSearch为5.6.10

image
image
image
image
image
image

删掉蓝框中的文件(如上) 最后我们的目录结构(如下)

image

下面pom文件主要修改的是把spring boot从IntelliJ默认的版本换成2.0.4以及添加netty3的客户端 否则启动会报错
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>net.conn</groupId>
	<artifactId>elasticsearch</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<name>elasticsearch</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<!--ElasticSearch-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>
		<!--需要引入transport-netty3-client,否则会启动报错-->
		<dependency>
            <groupId>org.elasticsearch.plugin</groupId>
            <artifactId>transport-netty3-client</artifactId>
            <version>5.6.10</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

二、配置代码

在resources下新建config文件夹 然后创建elasticsearch.properties

image

#Es地址
es.hostName=localhost

#Es端口号
es.transport=9300

#配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群
es.cluster.name=elasticsearch

在Java工程下创建config文件夹 然后创建ElasticSearchConfig.java

image

package net.conn.elasticsearch.config;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * @Author Conn
 * @Date 2018/10/15
 */
@Configuration
@PropertySource(value = "classpath:config/elasticsearch.properties")
public class ElasticSearchConfig {
    private static final Logger logger = LoggerFactory.getLogger(ElasticSearchConfig.class);

    @Value("${es.hostName}")
    private String hostName;

    @Value("${es.transport}")
    private Integer transport;

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

    @Bean
    public TransportClient transportClient() {
        logger.info("ElasticSearch初始化开始");

        TransportClient transportClient = null;

        try {
            TransportAddress transportAddress = new InetSocketTransportAddress(InetAddress.getByName(hostName), Integer.valueOf(transport));

            //配置信息
            Settings es = Settings.builder().put("cluster.name", clusterName).build();

            //配置信息Settings自定义
            transportClient = new PreBuiltTransportClient(es);

            transportClient.addTransportAddress(transportAddress);
        } catch (UnknownHostException e) {
            logger.error("ES创建错误", e);
        }
        return transportClient;
    }
}

三、启动项目

这时候我们通过springboot启动器启动项目会发现控制台报以下的错误
2018-10-19 15:48:05.189  INFO 44964 --- [       Thread-8] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@418c5a9c: startup date [Fri Oct 19 15:48:02 CST 2018]; root of context hierarchy
2018-10-19 15:48:05.190  INFO 44964 --- [       Thread-8] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
Disconnected from the target VM, address: '127.0.0.1:60159', transport: 'socket'
解决方法是 pom文件里注释掉provided
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<!--<scope>provided</scope>-->
		</dependency>

后记

OK 项目启动了 我们的整合也就成功了 接下来博主会带来部分elastic search的Java API的使用方法。

©喜欢我的文章就评论或点个赞吧 至少让我知道有帮助到你

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135416.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android setContentView流程[通俗易懂]

    Android setContentView流程[通俗易懂]MainActivity继承Activity的流程MainActivity继承至Activityimportandroid.app.Activity;importandroid.os.Bundle;publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(saved

    2022年6月26日
    31
  • 关于radcontrols控件之Radupload「建议收藏」

    关于radcontrols控件之Radupload「建议收藏」Namespace:Telerik.Windows.ControlsAssembly:Telerik.Windows.Controls.Input(inTelerik.Windows.Controls.Input.dll)RadUpload是客户端和服务器端的一部分。在客户端执行完全在浏览器中使用Silverlight的平台。在服务器端需要处理的服务器进行处理的文件提交到客户端。检查在…

    2022年7月24日
    7
  • JavaScript数组filter方法

    JavaScript数组filter方法1.数组filter方法作用筛选数组,将满足条件的元素放入新数组中2.语法:array.filter(function(item,index,arr){})第一个参数:item,必须,当前元素的值第二个参数:index,可选,当前元素在数组中的索引值第三个参数:arr,当前元素所处的数组对象3.filter方法特点(1)函数执行次数===数组长度(2)函数内部的returnreturntrue:满足筛选条件,放入新数组中return

    2022年7月14日
    15
  • Java|JavaScript 模拟钓鱼网站实例一[通俗易懂]

    Java|JavaScript 模拟钓鱼网站实例一[通俗易懂]本次只是用最简单的方法模拟钓鱼网站。前端的代码是从网上下载的,我只是做了稍微的修改。整个项目的源码如下(2018年2月10日在审核估计2月11后可以下载):http://download.csdn.net/download/qq78442761/10247969最后的效果是如下图:输入用户名和密码后,会提醒服务器繁忙然后,我们登录到另外一个页面进行查看:这里涉及如下技术:1.修改网上下载的html…

    2022年8月24日
    6
  • pycharm2018激活码永久[在线序列号]

    pycharm2018激活码永久[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    314
  • go语言的type func()用法

    go语言的type func()用法在 go 语言中 type 可以定义任何自定义的类型比如熟悉的 typedogstruc typemyIntint 等等所以 func 也是可以作为类型自定义的 typemyFuncfu int int 意思是自定义了一个叫 myFunc 的函数类型 这个函数的签名必须符合输入为 int 输出为 int 已知 相同底层类型的变量之间是可以相互转换的 例如从一个取值范围小的 int16 转为取值范围大的 int32 所以 自定义的 myInt 和 int 之间也是可以转换的 typemyIn

    2025年6月8日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号