從 1.x 遷移至 2.x 的遷移指南
Spring Data for Apache Cassandra 2.0 在從較早版本升級時,引入了一系列重大變更
-
將
spring-cql
和spring-data-cassandra
模組合併為單一模組。 -
將
CqlOperations
和CassandraOperations
中的非同步和同步操作,分離到專用的介面和範本中。 -
修訂
CqlTemplate
API,使其與JdbcTemplate
對齊。 -
移除
CassandraOperations.selectBySimpleIds
方法。 -
為
CassandraRepository
使用更好的名稱。 -
移除 SD Cassandra
ConsistencyLevel
和RetryPolicy
類型,改用 DataStaxConsistencyLevel
和RetryPolicy
類型。 -
將 CQL 規格重構為值物件和配置器。
-
將
QueryOptions
重構為不可變物件。 -
將
CassandraPersistentProperty
重構為單欄。
棄用
-
棄用
QueryOptionsBuilder.readTimeout(long, TimeUnit)
,改用QueryOptionsBuilder.readTimeout(Duration)
。 -
棄用
CustomConversions
,改用CassandraCustomConversions
。 -
棄用
BasicCassandraMappingContext
,改用CassandraMappingContext
。 -
棄用
o.s.d.c.core.cql.CachedPreparedStatementCreator
,改用o.s.d.c.core.cql.support.CachedPreparedStatementCreator
。 -
棄用
CqlTemplate.getSession()
,改用getSessionFactory()
。 -
棄用
CqlIdentifier.cqlId(…)
和KeyspaceIdentifier.ksId(…)
,改用.of(…)
方法。 -
棄用
QueryOptions
的建構子,改用其建構器。 -
棄用
TypedIdCassandraRepository
,改用CassandraRepository
合併 Spring CQL 和 Spring Data Cassandra 模組
Spring CQL 和 Spring Data Cassandra 現在已合併為單一模組。獨立的 spring-cql
模組已不再提供。您可以在 spring-data-cassandra
中找到所有合併的類型。以下列表顯示如何在您的 Maven 依賴項中包含 spring-data-cassandra
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-cassandra</artifactId>
<version>4.4.0</version>
</dependency>
</dependencies>
隨著合併,我們將所有 CQL 套件合併到 Spring Data Cassandra 中
-
將
o.s.d.cql
移動到o.s.d.cassandra.core.cql
。 -
將
o.s.d.cql
與o.s.d.cassandra.config
合併,並扁平化 XML 和 Java 子套件。 -
將
CassandraExceptionTranslator
和CqlExceptionTranslator
移動到o.s.d.c.core.cql
。 -
將 Cassandra 例外
o.s.d.c.support.exception
移動到o.s.d.cassandra
。 -
將
o.s.d.c.convert
移動到o.s.d.c.core.convert
(影響轉換器)。 -
將
o.s.d.c.mapping
移動到o.s.d.c.core.mapping
(影響對應註解)。 -
將
MapId
從o.s.d.c.repository
移動到o.s.d.c.core.mapping
。
[[revised-cqltemplate/cassandratemplate]] == 修訂後的 CqlTemplate
/CassandraTemplate
我們以三種方式拆分 CqlTemplate
和 CassandraTemplate
-
CassandraTemplate
不再是CqlTemplate
,而是使用一個實例,允許重複使用和對提取大小、一致性級別和重試策略進行細粒度控制。您可以通過CassandraTemplate.getCqlOperations()
取得CqlOperations
。由於此變更,CqlTemplate
的依賴項注入需要額外的 bean 設定。 -
CqlTemplate
現在反映基本的 CQL 操作,而不是混合高階和低階 API 呼叫(例如count(…)
與execute(…)
),並且縮減的方法集與 Spring Framework 的JdbcTemplate
及其方便的回呼介面對齊。 -
非同步方法通過使用
ListenableFuture
在AsyncCqlTemplate
和AsyncCassandraTemplate
上重新實作。我們移除了Cancellable
和各種非同步回呼監聽器。ListenableFuture
是一種彈性的方法,允許轉換為CompletableFuture
。
移除 CassandraOperations.selectBySimpleIds()
移除此方法的原因是它不支援複雜的 ID。新引入的查詢 DSL 允許單欄 ID 的對應和複雜 ID,如下例所示
cassandraTemplate.select(Query.query(Criteria.where("id").in(…)), Person.class)
為 CassandraRepository
使用更好的名稱
我們重新命名了 CassandraRepository
和 TypedIdCassandraRepository
,使 Spring Data Cassandra 命名與其他 Spring Data 模組對齊
-
將
CassandraRepository
重新命名為MapIdCassandraRepository
-
將
TypedIdCassandraRepository
重新命名為CassandraRepository
-
引入
TypedIdCassandraRepository
,擴展CassandraRepository
作為已棄用的類型,以簡化遷移
移除 SD Cassandra ConsistencyLevel
和 RetryPolicy
類型,改用 DataStax ConsistencyLevel
和 RetryPolicy
類型
Spring Data Cassandra ConsistencyLevel
和 RetryPolicy
已被移除。請使用 DataStax 驅動程式提供的類型。
Spring Data Cassandra 類型限制了 Cassandra 原生驅動程式中提供和允許的可用功能的使用。因此,每次驅動程式引入更新的功能時,Spring Data Cassandra 的類型都需要更新。
將 CQL 規格重構為值物件和配置器
盡可能地,CQL 規格類型現在是值類型(例如 FieldSpecification
、AlterColumnSpecification
),並且物件由靜態 factory 方法建構。這允許簡單值物件的不可變性。在強制屬性(例如表名或鍵空間名)上操作的配置器物件(例如 AlterTableSpecification
)最初通過靜態 factory 方法建構,並允許進一步配置,直到建立所需的狀態。
將 QueryOptions
重構為不可變物件
QueryOptions
和 WriteOptions
現在是不可變的,並且可以通過建構器建立。接受 QueryOptions
的方法強制執行非 Null 物件,這些物件可從靜態 empty()
factory 方法取得。以下範例顯示如何使用 QueryOptions.builder()
QueryOptions queryOptions = QueryOptions.builder()
.consistencyLevel(ConsistencyLevel.ANY)
.retryPolicy(FallthroughRetryPolicy.INSTANCE)
.readTimeout(Duration.ofSeconds(10))
.fetchSize(10)
.tracing(true)
.build();