最近公司项目,在做版本升级,首先srping2.0+升级到spring3.0+,目前无漏洞版本是springBoot3.2.12+springClould2023.0.3,升级完spring,紧接着升级es,原来我们使用的es客户端版本是7.9.3,升级到无漏洞版本是7.17.23
java
<elasticsearch.version>7.17.23</elasticsearch.version>
<spring-data-elasticsearch.version>4.1.15</spring-data-elasticsearch.version>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>${spring-data-elasticsearch.version}</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Elasticsearch -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<!-- required by elasticsearch -->
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
不过es客户端和服务端,存在匹配度,不要盲目的升级客户端版本,我们开发环境服务端使用的是7.9.2版本,客户端使用的是7.9.3版本,可以完美兼容,
我升级客户端到7.17.23版本后,es中的有些类的包名改了,要修改,其余也没什么,项目启动后可以链接到es服务,执行语句包括:查询,插入,聚合都没有问题,然后就发版上线了,结果坑就在这等着我呢
线上升级后,我第一时间登陆系统,做升级验证,结果一个报错就蹦出来了,淦!!!
遇到报错不怕,解决一下就行了,报错信息如图:
大致意思就是构建风格要是oss,这个oss是啥,还真没了解过,查了一下资料
Elasticsearch 服务端版本分为 OSS(Open Source Software)和默认版本(商业版)的主要原因是提供不同的许可模式和功能集。以下是详细的解释:
- 许可模式和功能集
OSS 版本
许可证:采用 Apache 2.0 许可证,完全开源。
功能:包含 Elasticsearch 的核心功能,如索引、搜索、聚合等。
插件:只能使用开源插件。
支持:主要依赖社区支持。
默认版本(商业版)
许可证:采用 Elastic 许可证,包含商业特性。
功能:除了 OSS 版本的核心功能外,还包括一些商业特性,如安全特性(X-Pack)、监控、警报、机器学习等。
插件:可以使用开源插件和商业插件。
支持:提供官方技术支持和维护。 - 构建风味(Build Flavor)
构建风味是指在构建 Elasticsearch 时选择的不同配置,以满足不同的需求。常见的构建风味包括:
oss:开源版本,不包含任何商业特性。
default:默认版本,包含所有功能,包括商业特性。 - 为什么需要区分构建风味
许可证合规性:
开源项目和商业项目对许可证有严格的要求。OSS 版本确保项目遵守开源许可证,而默认版本则允许使用商业特性。
功能选择:
不同的项目和组织可能有不同的需求。OSS 版本适合那些只需要基本功能且希望完全开源的项目,而默认版本适合需要更多商业特性的企业。
支持和服务:
商业版提供官方支持和维护,适合需要稳定性和专业支持的企业。开源版则依赖社区支持。 - 如何选择合适的构建风味
评估需求:
确定项目是否需要商业特性,如安全、监控、机器学习等。
考虑许可证:
确保项目的许可证要求与所选版本的许可证一致。
预算:
商业版通常需要购买许可证,而 OSS 版本是免费的。
我问了一下AI,
AI告诉我,可以在 pom.xml 中指定 oss 构建风味的依赖:
java
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
<classifier>oss</classifier>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>${spring-data-elasticsearch.version}</version>
</dependency>
</dependencies>
那怎么查看服务端的es是oss?还是默认版本
在Kibana,执行一下这个命令
GET /
正式环境用的oss版本,但是我在pom里没有指定构建风格,我初步认为是用没有指定构建风格的原因,所有我改了一下
java
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
<classifier>oss</classifier>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
结果我刷新maven,根本拉不到依赖,
这...
搞得我实在没办法了,只能回退版本到7.9.3,虽然没找到解决完美得解决办法,不过也知道了一些东西,那位大佬如果知道在不回退版本得情况下,可以解决这个问题,请指导一下!感谢!感谢!