我是 stackoverflow 的新人,很高兴向大家学习
我需要从以下位置升级我的 Java Spring Boot 程序:
更改pom.xml后:
我的elasticsearch依赖项(org.springframework.boot:spring-boot-starter-data-elasticsearch)也升级到3.0.5。但是,我发现缺少以下软件包:
所以我对新的 Elasticsearch 客户端库有一些疑问:
以下是我的ES的基本信息: 版本:7.10.1
另外,我还有一个愚蠢的问题想确认一下: 根据Spring-Data-Elasticsearch提供的以下信息: https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.versions
如果我的ES版本是7.10.1,我只能将Spring Boot升级到2.7.x?或者我升级到3.0.5也可以支持旧版本。
如有遗漏,我会再次提供。抱歉我的英语和术语很差。谢谢您的解答。
我尝试用以下模式更改pom:
案例一: 将 Java 从 11 升级到 17 将 Java Spring Boot 从 2.4.2 升级到 3.0.5 或 3.0.6 让 org.springframework.boot:spring-boot-starter-data-elasticsearch 版本与父版本相同 结果:部分ES包丢失,程序无法运行
案例2: 将 Java 从 11 升级到 17 保留 Java Spring Boot 2.4.2 将 org.springframework.boot:spring-boot-starter-data-elasticsearch 升级到 3.0.5 或 3.0.6 结果:程序运行没有错误
案例3: 将 Java 从 11 升级到 17 将 Java Spring Boot 从 2.4.2 升级到 3.0.5 或 3.0.6 保留 org.springframework.boot:spring-boot-starter-data-elasticsearch:2.4.2 结果:部分ES包丢失,程序无法运行
因此,看来丢失包的问题是由将 Java Spring Boot 从 2.4.2 升级到 3.0.x 引起的
首先,您应该能够将 Java 版本从 11 升级到 17,而无需更改程序版本。
您缺少的类来自 Elasticsearch 中已弃用的旧
RestHighLevelClient
库的集成。当您需要这些时,您似乎正在使用此库中的类和 NativeSearchQuery
. 编写本机查询
自 Spring Data Elasticsearch 5.0 起,使用新的 Elasticsearch 客户端库。为了为此客户端构建本机查询,您当然需要使用新客户端中的类(例如,请查看 Elasticsearch 文档),然后在 Spring Data Elasticsearch 中,您将需要使用
NativeQuery
。如果您使用 Spring Data Elasticsearch 提供的方法(Criteria 查询、存储库方法或 @Query 注解方法)构建查询,则不会发生任何变化。
使用 Spring Data Elasticsearch 版本 5.0 和 5.1(上周五发布 - 2023 年 5 月 12 日 - 即将发布的 Spring Boot 3.1 将引用),您仍然可以使用旧的客户端库。但这不再是默认的,必须配置它,检查(https://docs.spring.io/spring-data/elasticsearch/docs/5.0.6/reference/html/#elasticsearch.clients.resthighlevelclient)和(https://docs.spring.io/spring-data/elasticsearch/docs/5.0.6/reference/html/#elasticsearch-migration-guide-4.4-5.0.old-client)
当前版本当然也支持响应式编程。
至于文档中的版本参考:这些是开发和测试 Spring Data Elasticsearch 时使用的版本,因此是最低要求。您可以尝试更改构建正在使用的版本或运行应用程序时的运行时版本,但不能保证这会起作用。
新版本的 spring-boot 已弃用 RHLC。如果您想使用 java-17 和 spring-boot-3.0.1 或更高版本以及正常工作的 NativeSearchQuery,则只需添加以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>4.3.6</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.17.5</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
这是需要的,因为当 spring-boot 升级时,内置的 Rest-High-Level-Client 也会升级,旧的不起作用。外部降级RHLC版本即可正常使用。