|
对于最新的稳定版本,请使用 Spring Data Cassandra 4.3.1! |
|
对于最新的稳定版本,请使用 Spring Data Cassandra 4.3.1! |
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
<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>
<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
<cql:template session-ref="…" />
<cassandra:template session-ref="…" cassandra-converter-ref="…"/>
<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
数据模型迁移
其他更改
-
驱动程序的常量类已被删除,并重新引入为 。 已适应.
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(…)
命名空间支持
-
cql命名空间 (,改用)www.springframework.org/schema/cqlwww.springframework.org/schema/data/cassandra -
cassandra:cluster(终结点属性合并到cassandra:session) -
cql:template,请改用cassandra:cql-template -
删除了隐式 Bean 注册 Mapping Context、Context 和 Template API Bean。 这些必须明确声明。