高版本spring boot支持低版本的elasticsearch
问题描述
spring boot升级了,发现不支持6.X版本的elasticsearch。
根本原因是elasticsearch的7.X去掉了document type定义,每个document只有一个type。
spring boot是工程的基础,不能更改版本,只能更改spring-data-elasticsearch的版本。
生效的配置
<?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>com.test</groupId>
<artifactId>test</artifactId>
<version>1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.8.14</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>6.8.14</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.8.14</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.8.14</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.8.14</version>
</dependency>
</dependencies>
问题
spring boot对于elasticsearch的支持
版本:
| Spring Data Release Train | Spring Data Elasticsearch | Elasticsearch | Spring Framework | Spring Boot |
|---|---|---|---|---|
2021.0 (Pascal) | 4.2.1 | 7.12.1 | 5.3.7 | 2.5.x |
2020.0 (Ockham) | 4.1.x | 7.9.3 | 5.3.2 | 2.4.x |
Neumann | 4.0.x | 7.6.2 | 5.2.12 | 2.3.x |
Moore | 3.2.x | 6.8.12 | 5.2.12 | 2.2.x |
Lovelace | 3.1.x | 6.2.2 | 5.1.19 | 2.1.x |
Kay | 3.0.x | 5.5.0 | 5.0.13 | 2.0.x |
Ingalls | 2.1.x | 2.4.0 | 4.3.25 | 1.5.x |
官方集成方式
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
默认继承parent中elasticsearch的版本定义。
曾经尝试直接更改spring-boot-starter-data-elasticsearch的版本,如下配置。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>3.2.13.RELEASE</version>
</dependency>
虽然spring-boot-starter-data-elasticsearch的版本发生了变化,但是transport, transport-netty4-client,elasticsearch-rest-high-level-client,elasticsearch,elasticsearch-rest-client的版本依旧是最新的版本。
what?第一种方式失败。
追溯
查看spring boot中的配置,发现在spring-boot-dependencies中直接定义了elasticsearch的版本,而不是在spring-boot-starter-data-elasticsearch中定义。
<elasticsearch.version>7.6.2</elasticsearch.version>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>${elasticsearch.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>${elasticsearch.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
因此,更改spring-boot-starter-data-elasticsearch的版本并没有什么用。
解决问题
spring boot的继承关系:
spring-boot-starter-data-elasticsearch -》
spring-data-elasticsearch -》实际实现
因此spring-boot-starter-data-elasticsearch本身没有任何实现,所以将其抛弃,直接使用spring-data-elasticsearch。
鉴于maven的最短路径原则,需要在自己的pom中重新定义elasticsearch的版本,所以得出了上面的结论。
更多推荐
所有评论(0)