从 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();