springboot专题系列五:springboot 集成 elasticserach的小坑及解决办法

994 阅读2分钟

「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战

一、前言

由于工作需要开始接触 elasticserach,经过调研spring这个庞大的家族里已经封装好了 对elasticserach 对操纵的jar包,spring-data-elasticsearch 大大简化了我们的操作 elasticserach的操作步骤,但是这其中也有一些坑,下文我们会一一详细解释。

二、问题

  1. 由于工作需要,亲自试验了,elasticsearch 5.6.80, elasticsearch 6.4.2, elasticsearch 7.5.0, 三个版本的es,发现其中的差别还是很大的,比如 es5.6.80 还支持 一个index下建立多个type,而到6.4.2 以及7.5.0以后就不支持了,添加多type的时候会报错。

  2. 计划使用 springboot+spring-data-elasticsearch操作es,只需要引入的以下的maven坐标:

	<!---开箱即用,默认使用的和当前使用的springboot的一一致的spring-data-elasticsearch-->
	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

这其中有个坑就是,如果你想升级单独升级pring-boot-starter-data-elasticsearch 的版本而不升级springboot的版本,启动的时候就会报错,建议还是按照官方的版本对应关系进行选择,避免不必要的麻烦:

在这里插入图片描述

官方参考链接: docs.spring.io/spring-data…

  1. spring -data-elasticsearch 不同的版本之间的api也有所不同,建议不要随意升级

  2. 把springboot 从2.0.3 升级到2.2.0版本 会出现 循环依赖注入问题,比如 在a类中依赖了b类,然后在b类又依赖了a类,导致启动报错,原本在2.0.3版本的时候并没有出现问题,升级以后才出现这个问题,怀疑是springboot 2.2.0 对循环依赖做了一个不同的处理(还不是很确定),解决这个问题也很简单如下图在自注入注解的地方加上@Lazy注解即可:

public class A{
@Autowired
@Lazy
private B b;
...
}
public class B{
@Autowired
@Lazy
private A a;
...
}

ElasticSearch实战 之 es的安装和使用 blog.csdn.net/weter_drop/…