Upgrading from 4.4.x to 5.0.x
本节描述了从 4.4.x 版至 5.0.x 版的重大更改,以及如何通过新引入的功能替换已移除的功能。
Deprecations
Custom trace level logging
通过设置属性 logging.level.org.springframework.data.elasticsearch.client.WIRE=trace
进行日志记录现已弃用,Elasticsearch RestClient
提供了可通过将 tracer
包的日志级别设置为“trace”来激活的更佳解决方案。
org.springframework.data.elasticsearch.client.erhlc
package
请参见 Package changes,此程序包中的所有类都已弃用,因为要使用的默认客户端实现是基于 Elasticsearch 的新 Java 客户端,请参见 New Elasticsearch client
Breaking Changes
Package changes
所有使用或依赖已弃用 Elasticsearch RestHighLevelClient
的类现已移至包 org.springframework.data.elasticsearch.client.erhlc
。通过此更改,我们现在可以清楚地区分使用旧的已弃用 Elasticsearch 库的代码、使用新的 Elasticsearch 客户端的代码和与客户端实现无关的代码。目前提供的响应式实现也已移至这里,因为此实现包含从 Elasticsearch 库中复制和改编的代码。
如果你直接使用 ElasticsearchRestTemplate
,而不使用 ElasticsearchOperations
接口,你需要调整自己的导入。
使用 NativeSearchQuery
类时,你需要切换到 NativeQuery
类,它可以使用新 Elasticsearch 客户端库提供的 Query
实例。可以在测试代码中找到大量示例。
Conversion to Java 17 records
以下类已转换为 Record
,你可能需要将 getter 方法的使用从 getProp()
调整为 prop()
:
-
org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.IndexResponseMetaData
-
org.springframework.data.elasticsearch.core.ActiveShardCount
-
org.springframework.data.elasticsearch.support.Version
-
org.springframework.data.elasticsearch.support.ScoreDoc
-
org.springframework.data.elasticsearch.core.query.ScriptData
-
org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm
New HttpHeaders class
在 4.4 版之前,客户端配置使用 org.springframework:spring-web
项目中的 HttpHeaders
类。这会引入对该工件的依赖。不使用 spring-web 的用户会遇到错误,因为找不到此类。
在 5.0 版中,我们引入了自己的 HttpHeaders
来配置客户端。
因此,如果你在客户端配置中使用标头,你需要将 org.springframework.http.HttpHeaders
替换为 org.springframework.data.elasticsearch.support.HttpHeaders
。
提示:你可以将 org.springframework.http.HttpHeaders
传递给 org.springframework.data.elasticsearch.support.HttpHeaders
的 addAll()
方法。
New Elasticsearch client
Spring Data Elasticsearch 现在使用新的 ElasticsearchClient
,已弃用之前的 RestHighLevelClient
。
Imperative style configuration
要配置 Spring Data Elasticsearch 以使用新客户端,必须创建一个源自 org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration
的配置 bean:
@Configuration
public class NewRestClientConfig extends ElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
此配置方式与旧客户端相同,但不再需要创建此配置 bean 之外的其他内容。通过此配置,以下 bean 将在 Spring 应用程序上下文中可用:
-
RestClient
bean,即 Elasticsearch 客户端使用的已配置低级RestClient
-
ElasticsearchClient
bean,这是使用RestClient
的新客户端 -
ElasticsearchOperations
bean,可通过 Bean 名称 elasticsearchOperations 和 elasticsearchTemplate 使用,它使用ElasticsearchClient
Reactive style configuration
要在反应式环境中使用新客户端,唯一的区别在于用于导出配置的类:
@Configuration
public class NewRestClientConfig extends ReactiveElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
通过此配置,以下 bean 将在 Spring 应用程序上下文中可用:
-
RestClient
bean,即 Elasticsearch 客户端使用的已配置低级RestClient
-
ReactiveElasticsearchClient
bean,这是使用RestClient
的新响应式客户端 -
ReactiveElasticsearchOperations
bean,可通过 Bean 名称 reactiveElasticsearchOperations 和 reactiveElasticsearchTemplate 使用,它使用ReactiveElasticsearchClient
Still want to use the old client?
旧的已弃用的 RestHighLevelClient
仍然可以使用,但你需要将依赖项显式添加到你的应用程序,因为 Spring Data Elasticsearch 不再自动引入它:
<!-- include the RHLC, specify version explicitly -->
<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>
请务必显式指定版本 7.17.6,否则 maven 将解析为 8.5.0 而该版本不存在。