对于最新的稳定版本,请使用 Spring Data Cassandra 4.3.1Spring中文文档

对于最新的稳定版本,请使用 Spring Data Cassandra 4.3.1Spring中文文档

Spring Data for Apache Cassandra 3.0 在从早期版本升级时引入了一组重大更改。Spring中文文档

查看依赖项

升级到 Spring Data Cassandra 需要升级到 DataStax 驱动程序版本 4。升级到新驱动程序会带来传递依赖项更改,最值得注意的是,Google Guava 被驱动程序捆绑和着色。 有关驱动程序相关更改的详细信息,请查看 DataStax Java Driver for Apache Cassandra 4 升级指南Spring中文文档

调整配置

DataStax Java Driver 4 将对象合并为一个对象,因此删除了所有与 API 相关的 API。 通过删除大多数移动到的配置项(主要是基于文件的配置项),对配置进行了大量修改。 这意味着 ,现在通过其他方式配置了更多选项。ClusterSessionCqlSessionClusterDriverConfigLoaderSocketOptionsAddressTranslatorSpring中文文档

为了反映配置构建器中的更改,已重命名为 accept now,而不是 . 请确保在配置中提供本地数据中心,因为这是正确配置负载平衡所必需的。ClusterBuilderConfigurerSessionBuilderConfigurerCqlSessionBuilderCluster.BuilderSpring中文文档

连接

() 和 () 的配置元素合并为一个 () 元素,用于配置键空间和端点。Clustercassandra:clusterSessioncassandra:sessionCqlSessioncassandra:sessionSpring中文文档

升级后,模式支持已移至新的命名空间元素:该元素提供 Bean。cassandra:session-factorySessionFactorySpring中文文档

例 1.版本 2 中的集群、会话和架构配置:
<cassandra:cluster contact-points="localhost" port="9042">
  <cassandra:keyspace action="CREATE_DROP" name="mykeyspace" />
</cassandra:cluster>

<cassandra:session keyspace-name="mykeyspace" schema-action="CREATE">
  <cassandra:startup-cql>CREATE TABLE …</cassandra:startup-cql>
</cassandra:session>
例 2.版本 3 中的会话和架构配置:
<cassandra:session contact-points="localhost" port="9042" keyspace="mykeyspace" local-datacenter="datacenter1">
  <cassandra:keyspace action="CREATE_DROP" name="mykeyspace" />
</cassandra:session>

<cassandra:session-factory schema-action="CREATE">
  <cassandra:script location="classpath:/schema.cql"/>
</cassandra:session-factory>
Spring Data Cassandra 3.0 在使用 XML 命名空间配置时不再注册默认的 Mapping Context、Context 和 Template API bean。 默认值应应用于应用程序或 Spring Boot 级别。
Spring Data Cassandra 3.0 在使用 XML 命名空间配置时不再注册默认的 Mapping Context、Context 和 Template API bean。 默认值应应用于应用程序或 Spring Boot 级别。

模板 API

Spring Data for Apache Cassandra 封装了驱动程序升级带来的大多数更改,如果您的应用程序主要与映射实体或原始 Java 类型交互,则提供模板 API 和存储库支持。Spring中文文档

我们通常建议使用创建对象,因为出厂用法允许同步创建架构,并在使用多个数据库时引入一定程度的灵活性。CqlTemplateCassandraTemplateSessionFactorySpring中文文档

例 3.版本 2 中的模板 API 配置:
<cql:template session-ref="…" />

<cassandra:template session-ref="…" cassandra-converter-ref="…"/>
例 4.版本 3 中的模板 API 配置:
<cassandra:session-factory />

<cassandra:cql-template session-factory-ref="…" />

<cassandra:template session-factory-ref="…" cassandra-converter-ref="…"/>

您必须在直接使用 DataStax 驱动程序 API 的所有地方调整您的代码。 典型案例包括:Spring中文文档

变化AsyncCqlTemplate

DataStax 驱动程序 4 更改了异步运行的查询的结果类型。 为了反映这些更改,您需要调整提供以下功能的代码:Spring中文文档

结果集提取需要 DataStax 的新接口。 现在在以前使用的地方使用。 请注意,它返回一个而不是标量对象,因此代码的迁移可以在提取器中使用完全非阻塞的代码。AsyncResultSetAsyncCqlTemplateAsyncResultSetExtractorResultSetExtractorAsyncResultSetExtractor.extractData(…)FutureSpring中文文档

数据模型迁移

如果使用以下功能,则数据模型可能需要更新:Spring中文文档

@CassandraType

DataStax 驱动程序 4 不再附带用于描述 Cassandra 类型的枚举。 我们决定使用 重新引入枚举。 请务必更新您的导入以使用新引入的替换类型。NameCassandraType.NameSpring中文文档

强制报价

此标志现已弃用,建议不要再使用它。 Spring Data for Apache Cassandra 在内部使用驱动程序,确保在需要的地方引用。CqlIdentifierSpring中文文档

物业类型

DataStax 驱动程序 4 不再使用 . 请升级您的数据模型以使用 . 还请将原始 UDT 和元组类型分别迁移到新的驱动程序类型。java.lang.Datejava.time.LocalDateTimeUdtValueTupleValueSpring中文文档

其他更改

  • 驱动程序的常量类已被删除,并重新引入为 。 已适应.ConsistencyLevelDefaultConsistencyLevel@ConsistencyDefaultConsistencyLevelSpring中文文档

  • RetryPolicyon 和 types 被删除,没有替换。QueryOptions…CqlTemplateSpring中文文档

  • 驱动程序类型已删除。 分页状态现在使用 .PagingStateByteBufferSpring中文文档

  • SimpleUserTypeResolver接受而不是 .CqlSessionClusterSpring中文文档

  • SimpleTupleTypeFactory已迁移到 . 不再需要 / 上下文。enumSimpleTupleTypeFactory.INSTANCEClusterCqlSessionSpring中文文档

  • 引入功能构建语句,因为 QueryBuilder API 使用不可变语句类型。StatementBuilderSpring中文文档

  • SessionBean 重命名为 to,Bean 重命名为 to 。sessioncassandraSessionSessionFactorysessionFactorycassandraSessionFactorySpring中文文档

  • ReactiveSessionBean 重命名为 to,Bean 重命名为 to 。reactiveSessionreactiveCassandraSessionReactiveSessionFactoryreactiveSessionFactoryreactiveCassandraSessionFactorySpring中文文档

  • ReactiveSessionFactory.getSession()现在返回一个 . 以前它只返回 .Mono<ReactiveSession>ReactiveSessionSpring中文文档

  • 数据类型解析已移入,因此所有与 / 相关的方法都已移入(受影响的方法为 、 、 和 )。ColumnTypeResolverDataTypeCassandraPersistentEntityCassandraPersistentPropertyColumnTypeResolverMappingContext.getDataType(…)CassandraPersistentProperty.getDataType()CassandraPersistentEntity.getUserType()CassandraPersistentEntity.getTupleType()Spring中文文档

  • 架构创建已从 移动到 (受影响的方法为 、 和 )。MappingContextSchemaFactoryCassandraMappingContext.getCreateTableSpecificationFor(…)CassandraMappingContext.getCreateIndexSpecificationsFor(…)CassandraMappingContext.getCreateUserTypeSpecificationFor(…)Spring中文文档

弃用

  • CassandraCqlSessionFactoryBean,请改用。CqlSessionFactoryBeanSpring中文文档

  • KeyspaceIdentifier和 ,请改用。CqlIdentifiercom.datastax.oss.driver.api.core.CqlIdentifierSpring中文文档

  • CassandraSessionFactoryBean,请改用。CqlSessionFactoryBeanSpring中文文档

  • AbstractCqlTemplateConfiguration,请改用。AbstractSessionConfigurationSpring中文文档

  • AbstractSessionConfiguration.getClusterName(),请改用。AbstractSessionConfiguration.getSessionName()Spring中文文档

  • CodecRegistryTupleTypeFactory,请改用。SimpleTupleTypeFactorySpring中文文档

  • Spring Data的,请改用驱动程序。CqlIdentifierCqlIdentifierSpring中文文档

  • forceQuote不再需要引用的属性。 正确转义保留关键字并注意区分大小写。CqlIdentifierSpring中文文档

  • fetchSizeon 和 types 已弃用,请改用QueryOptions…CqlTemplatepageSizeSpring中文文档

  • CassandraMappingContext.setUserTypeResolver(…)、 和 : 在 上配置这些属性。CassandraMappingContext.setCodecRegistry(…)CassandraMappingContext.setCustomConversions(…)CassandraConverterSpring中文文档

  • TupleTypeFactory和 : 不再使用,因为 Cassandra 驱动程序附带了工厂方法。CassandraMappingContext.setTupleTypeFactory(…)TupleTypeFactoryDataTypes.tupleOf(…)Spring中文文档

  • 不推荐通过 () 创建架构。 通过 () 创建密钥空间不受影响。CqlSessionFactoryBeancassandra:sessionCqlSessionFactoryBeancassandra:sessionSpring中文文档

清除

配置 API

公用事业

  • GuavaListenableFutureAdapterSpring中文文档

  • QueryOptions以及构造函数获取和参数。 将构建器与执行配置文件结合使用作为替换。WriteOptionsConsistencyLevelRetryPolicySpring中文文档

  • CassandraAccessor.setRetryPolicy(…)和方法。 使用执行配置文件作为替换。ReactiveCqlTemplate.setRetryPolicy(…)Spring中文文档

命名空间支持

增加

配置 API

命名空间支持