從 1.x 遷移到 2.x 的指南
Spring Data for Apache Cassandra 2.0 在從早期版本升級時引入了一系列重大變更
-
將
spring-cql和spring-data-cassandra模組合併為一個模組。 -
將
CqlOperations和CassandraOperations中的非同步和同步操作分離到專門的介面和模板中。 -
修訂了
CqlTemplateAPI 以與JdbcTemplate對齊。 -
移除了
CassandraOperations.selectBySimpleIds方法。 -
為
CassandraRepository使用了更好的名稱。 -
移除了 SD Cassandra 的
ConsistencyLevel和RetryPolicy型別,轉而使用 DataStax 的ConsistencyLevel和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>5.0.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),並且物件透過靜態工廠方法構建。這允許簡單值物件的不可變性。操作強制屬性(例如表名或鍵空間名)的配置器物件(例如 AlterTableSpecification)最初透過靜態工廠方法構建,並允許進一步配置,直到建立所需的狀態。
將 QueryOptions 重構為不可變物件
QueryOptions 和 WriteOptions 現在是不可變的,並且可以透過構建器建立。接受 QueryOptions 的方法強制非空物件,這些物件可以透過靜態 empty() 工廠方法獲得。以下示例展示瞭如何使用 QueryOptions.builder()
QueryOptions queryOptions = QueryOptions.builder()
.consistencyLevel(ConsistencyLevel.ANY)
.retryPolicy(FallthroughRetryPolicy.INSTANCE)
.readTimeout(Duration.ofSeconds(10))
.fetchSize(10)
.tracing(true)
.build();