從 4.4.x 升級到 5.0.x
本節描述了從 4.4.x 版本到 5.0.x 版本的破壞性變更,以及如何用新引入的特性替代已移除的特性。
棄用
自定義跟蹤級別日誌
透過設定屬性 logging.level.org.springframework.data.elasticsearch.client.WIRE=trace
進行日誌記錄現在已棄用,Elasticsearch RestClient
提供了更好的解決方案,可以透過將 tracer
包的日誌級別設定為 "trace" 來啟用。
org.springframework.data.elasticsearch.client.erhlc
包
請參閱 包變更,此包中的所有類都已被棄用,因為預設使用的客戶端實現是基於 Elasticsearch 新的 Java 客戶端的,請參閱 新的 Elasticsearch 客戶端
破壞性變更
包變更
所有使用或依賴於已棄用的 Elasticsearch RestHighLevelClient
的類都已移至 org.springframework.data.elasticsearch.client.erhlc
包。透過這一變更,我們現在清晰地分離了使用舊的已棄用 Elasticsearch 庫的程式碼、使用新的 Elasticsearch 客戶端的程式碼以及不依賴於特定客戶端實現的程式碼。此外,此前提供的響應式實現也已移至此處,因為該實現包含從 Elasticsearch 庫複製和修改的程式碼。
如果您直接使用 ElasticsearchRestTemplate
而非 ElasticsearchOperations
介面,則還需要調整您的匯入。
使用 NativeSearchQuery
類時,您需要切換到 NativeQuery
類,該類可以接受來自新的 Elasticsearch 客戶端庫的 Query
例項。您可以在測試程式碼中找到大量示例。
轉換為 Java 17 Record
以下類已轉換為 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
新的 HttpHeaders 類
直到 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()
方法。
新的 Elasticsearch 客戶端
Spring Data Elasticsearch 現在使用新的 ElasticsearchClient
並已棄用之前的 RestHighLevelClient
。
命令式風格配置
要配置 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
響應式風格配置
要在響應式環境中使用新的客戶端,唯一的區別在於派生配置的類。
@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
仍想使用舊客戶端?
舊的已棄用 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,而該版本不存在。