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

查看依赖项

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

调整配置

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

如果使用的是基于 XML 的配置,请确保将所有配置文件从命名空间 () 迁移到命名空间 ()。cqlwww.springframework.org/schema/cql www.springframework.org/schema/cql/spring-cql.xsdcassandrawww.springframework.org/schema/data/cassandra www.springframework.org/schema/data/cassandra/spring-cassandra.xsd

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

连接

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

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

例 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 和存储库支持。

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

例 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 的所有地方调整您的代码。 典型案例包括:

  • 的实现ResultSetExtractor

  • 的实现RowCallbackHandler

  • 的实现RowMapper

  • 包括异步和反应式变体的实现PreparedStatementCreator

  • 调用CqlTemplate.queryForResultSet(…)

  • 调用接受的方法Statement

变化AsyncCqlTemplate

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

  • 的实现AsyncSessionCallback

  • 的实现AsyncPreparedStatementCreator

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

数据模型迁移

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

  • @CassandraType

  • forceQuote在 、 、 和@Table@Column@PrimaryKeyColumn@PrimaryKey@UserDefinedType

  • 使用java.lang.Date

  • 使用 或 的属性UDTValueTupleValue

@CassandraType

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

强制报价

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

物业类型

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

其他更改

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

  • RetryPolicyon 和 types 被删除,没有替换。QueryOptions…CqlTemplate

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

  • SimpleUserTypeResolver接受而不是 .CqlSessionCluster

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

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

  • SessionBean 重命名为 to,Bean 重命名为 to 。sessioncassandraSessionSessionFactorysessionFactorycassandraSessionFactory

  • ReactiveSessionBean 重命名为 to,Bean 重命名为 to 。reactiveSessionreactiveCassandraSessionReactiveSessionFactoryreactiveSessionFactoryreactiveCassandraSessionFactory

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

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

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

弃用

  • CassandraCqlSessionFactoryBean,请改用。CqlSessionFactoryBean

  • KeyspaceIdentifier和 ,请改用。CqlIdentifiercom.datastax.oss.driver.api.core.CqlIdentifier

  • CassandraSessionFactoryBean,请改用。CqlSessionFactoryBean

  • AbstractCqlTemplateConfiguration,请改用。AbstractSessionConfiguration

  • AbstractSessionConfiguration.getClusterName(),请改用。AbstractSessionConfiguration.getSessionName()

  • CodecRegistryTupleTypeFactory,请改用。SimpleTupleTypeFactory

  • Spring Data的,请改用驱动程序。CqlIdentifierCqlIdentifier

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

  • fetchSizeon 和 types 已弃用,请改用QueryOptions…CqlTemplatepageSize

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

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

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

清除

配置 API

  • PoolingOptionsFactoryBean

  • SocketOptionsFactoryBean

  • CassandraClusterFactoryBean

  • CassandraClusterParser

  • CassandraCqlClusterFactoryBean

  • CassandraCqlClusterParser

  • CassandraCqlSessionParser

  • AbstractClusterConfiguration

  • ClusterBuilderConfigurer(请改用SessionBuilderConfigurer

公用事业

  • GuavaListenableFutureAdapter

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

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

命名空间支持

增加

配置 API

  • CqlSessionFactoryBean

  • InitializeKeyspaceBeanDefinitionParser

  • SessionFactoryFactoryBean包括通过KeyspacePopulator

  • KeyspacePopulator并初始化密钥空间SessionFactoryInitializer

命名空间支持

  • cassandra:cluster(终结点属性合并到cassandra:session)

  • cassandra:initialize-keyspace命名空间支持

  • cassandra:session-factory有支持cassandra:script