记录 springboot整合elasticsearch搭建过程遇到…
2019-08-16 09:50:03来源:博客园 阅读 ()
记录 springboot整合elasticsearch搭建过程遇到的坑
最近在学习elasticseach,目前来说很火的全文搜索引擎。具体的,请参考官网,这里不多阐释,主要这里就是把自己 搭建 整合 elasticsearch和spring boot整合,来分享给大家
1.首先环境准备。docker,springboot 2.1.6.RELEASE,cent-os 虚拟机
去官网 https://hub.docker.com/ 搜索elasticsearch
回车 搜索
点进去elasticsearch找到对应的版本,我这里建议 选6.8.1,为什么,一会再说
连接 虚拟机,有很多连接虚拟机的工具,我这里用的是SecureCRT , 因为6.8.1 版本运行起来,得制定虚拟机的运行大小,如果不指定的话,会启动不起来,启动
日志也有记录:
登录root用户:执行以下命令:
sysctl -w vm.max_map_count=262144 指定大小
查看 是否设置成功
sysctl -a|grep vm.max_map_count
如果显示
vm.max_map_count = 262144 说明操作成功。
ok ,基本设置完毕。开始用docker 拉取下来elasticsearch的镜像
docker pull elasticsearch:6.8.1
拉取完毕,我们来运行它
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 9200:9200 -p 9300:9300 --name myes2 你的iamgeid
这样运行可以看到 系统启动的日志,如果想系统后台的话 加个 -d 命令 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name myes2 更多命令参数,请自行百度
启动好后,看是否启动成功,
执行:docker ps
可以看到,已经分配好了端口,9200 和 9300 并且已经映射好了
我们还可以修改elasticsearch的内部文件 执行
docker exec -it myes2 /bin/bash 进入到内部
对应的config文件夹下。就是配置。同样的logs文件夹就是log
启动 完后,测试下,是否可以在虚拟机里连接通
curl -a localhost:9200
这样,就启动好了。ok,虚拟机这边配置好了,接下来,java端。
我测试的时候,是用的 spring-data-jpa方式,ok,废话不多说,开始,首先是pom文件
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.JDBCTest</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <!-- https://mvnrepository.com/artifact/io.druid/druid-server --> <dependency> <groupId>io.druid</groupId> <artifactId>druid-server</artifactId> <version>0.12.3</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.18</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>com.liqs.myconfiguration</groupId> <artifactId>myconfiguration</artifactId> <version>3.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
因为测试的时候,,引用的其他的,我们暂时不关心,核心就是
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
配置启动的时候的一些参数,我是用yml写的
spring: data: elasticsearch: cluster-name: docker-cluster //指定 集群的名字。不知道的话,可以 cluster-nodes: 192.168.1.5:9300 //端口是9300 9200 是客户端访问的
集群的名字,不知道的话可以参考上面 执行 curl以后的结果,里面会有集群名字
写一个bean 我们叫它book
package com.bean; import org.springframework.data.elasticsearch.annotations.Document;
//用 data的注解 document 指定 索引名,和类型,这里为了测试方便,我随便起的名字 @Document(indexName = "test",type = "a") public class Book { private String name; private String content; private Integer id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } }
在写一个继承
ElasticsearchCrudRepository 的接口
SearchJPA
package com.dao; import com.bean.Book; import com.bean.User; import org.springframework.data.elasticsearch.repository.ElasticsearchCrudRepository;
//ElasticsearchCrudRepository 会有两个泛型,一个是指定要存入对象的类型。另外一个是主键的类型
public interface SearchJPA extends ElasticsearchCrudRepository<Book,Integer> { }
基本的都写好了,来测试下
package com.controler; import com.bean.Book; import com.bean.User; import com.config.MqTest; import com.dao.SearchJPA; import com.dao.UserService; import com.liqs.config.MyClassService; import org.springframework.data.domain.Sort; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; @Controller public class GetUserAction { @Resource private SearchJPA searchJPA; @RequestMapping("/getsearch") public String getElastic() { Book book = new Book(); book.setId(1); book.setName("mybook"); book.setContent("mybook is written by liqs"); searchJPA.save(book); } }
我们在浏览器访问 http://localhost:8080/getsearch 端口 自己的服务器是什么,填写什么,我的是8080 默认的
ok 没报错,我们看下数据是不是真的进入了,这里我用的postman
可以看到 数据是已经存入了,到此结束
遇到的问题,坑,总结一下
1.首先一个是,第一次启动es的时候,没有指定 ES_JAVA_OPTS 导致,启动虽然成功了,但是访问的时候,总是失败,后来百度了下,是因为 默认得分配4g空间大小。我这里没这么多,就按照网上设置的 ES_JAVA_OPTS="-Xms256m -Xmx256m" 就可以了。
2.版本匹配的问题,之前为什么说建议用6.8.1 版本呢,是因为 笔者用这个版本合成功了,如果想用其他版本的话,得参照官方的版本比对
https://github.com/spring-projects/spring-data-elasticsearch
如果 你的系统报类似于找不到节点的错误,请检查
1.你的es服务是否真的启动好了。
2.你的集群的名字是否和你真正的es的集群名字一致
3.你的端口写的是否正确
原文链接:https://www.cnblogs.com/liqs-note/p/11138680.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
- nacos~配置中心功能~springboot的支持 2020-06-10
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash