從 1.x 遷移到 2.x 的指南

Spring Data for Apache Cassandra 2.0 在從早期版本升級時引入了一系列重大變更

  • spring-cqlspring-data-cassandra 模組合併為一個模組。

  • CqlOperationsCassandraOperations 中的非同步和同步操作分離到專門的介面和模板中。

  • 修訂了 CqlTemplate API 以與 JdbcTemplate 對齊。

  • 移除了 CassandraOperations.selectBySimpleIds 方法。

  • CassandraRepository 使用了更好的名稱。

  • 移除了 SD Cassandra 的 ConsistencyLevelRetryPolicy 型別,轉而使用 DataStax 的 ConsistencyLevelRetryPolicy 型別。

  • 將 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>5.0.0</version>
  </dependency>

</dependencies>

合併後,我們將所有 CQL 包合併到 Spring Data Cassandra 中

  • o.s.d.cql 移至 o.s.d.cassandra.core.cql

  • o.s.d.cqlo.s.d.cassandra.config 合併,並扁平化了 XML 和 Java 子包。

  • CassandraExceptionTranslatorCqlExceptionTranslator 移至 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(影響對映註解)。

  • MapIdo.s.d.c.repository 移至 o.s.d.c.core.mapping

[[revised-cqltemplate/cassandratemplate]] == 修訂 CqlTemplate/CassandraTemplate

我們將 CqlTemplateCassandraTemplate 分為三種方式

  • CassandraTemplate 不再是 CqlTemplate,而是使用一個例項,允許重用和對獲取大小、一致性級別和重試策略進行細粒度控制。您可以透過 CassandraTemplate.getCqlOperations() 獲取 CqlOperations。由於此更改,CqlTemplate 的依賴注入需要額外的 bean 設定。

  • CqlTemplate 現在反映了基本的 CQL 操作,而不是混合高層和低層 API 呼叫(例如 count(…)execute(…)),並且其精簡的方法集與 Spring Framework 的 JdbcTemplate 及其方便的回撥介面保持一致。

  • 非同步方法透過使用 ListenableFutureAsyncCqlTemplateAsyncCassandraTemplate 上重新實現。我們移除了 Cancellable 和各種非同步回撥監聽器。ListenableFuture 是一種靈活的方法,允許轉換為 CompletableFuture

移除了 CassandraOperations.selectBySimpleIds()

該方法被移除,因為它不支援複雜 ID。新引入的查詢 DSL 允許對單列 ID 使用對映的複雜 ID,如下例所示

cassandraTemplate.select(Query.query(Criteria.where("id").in(…)), Person.class)

CassandraRepository 使用更好的名稱

我們重新命名了 CassandraRepositoryTypedIdCassandraRepository,以使 Spring Data Cassandra 的命名與其他 Spring Data 模組保持一致

  • CassandraRepository 重新命名為 MapIdCassandraRepository

  • TypedIdCassandraRepository 重新命名為 CassandraRepository

  • 引入了 TypedIdCassandraRepository,作為 CassandraRepository 的一個棄用型別,以簡化遷移

移除了 SD Cassandra 的 ConsistencyLevelRetryPolicy 型別,轉而使用 DataStax 的 ConsistencyLevelRetryPolicy 型別

Spring Data Cassandra 的 ConsistencyLevelRetryPolicy 已被移除。請使用 DataStax 驅動程式提供的型別。

Spring Data Cassandra 型別限制了 Cassandra 本機驅動程式提供和允許的可用功能的使用。因此,每次驅動程式引入新功能時,Spring Data Cassandra 的型別都需要更新。

將 CQL 規範重構為值物件和配置器

儘可能地,CQL 規範型別現在是值型別(例如 FieldSpecificationAlterColumnSpecification),並且物件透過靜態工廠方法構建。這允許簡單值物件的不可變性。操作強制屬性(例如表名或鍵空間名)的配置器物件(例如 AlterTableSpecification)最初透過靜態工廠方法構建,並允許進一步配置,直到建立所需的狀態。

QueryOptions 重構為不可變物件

QueryOptionsWriteOptions 現在是不可變的,並且可以透過構建器建立。接受 QueryOptions 的方法強制非空物件,這些物件可以透過靜態 empty() 工廠方法獲得。以下示例展示瞭如何使用 QueryOptions.builder()

QueryOptions queryOptions = QueryOptions.builder()
		.consistencyLevel(ConsistencyLevel.ANY)
		.retryPolicy(FallthroughRetryPolicy.INSTANCE)
		.readTimeout(Duration.ofSeconds(10))
		.fetchSize(10)
		.tracing(true)
		.build();

CassandraPersistentProperty 重構為單列

此更改僅在您直接操作對映模型時才會影響您。

CassandraPersistentProperty 以前允許為複合主鍵繫結多個列名。CassandraPersistentProperty 的列現在減少為單列。解析的複合主鍵透過 MappingContext.getRequiredPersistentEntity(…) 對映到類。

© . This site is unofficial and not affiliated with VMware.