|
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Cassandra 4.3.4! |
|
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Cassandra 4.3.4! |
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 都已删除。
通过删除大多数主要基于文件的配置项,对配置进行了大部分修改。
这意味着 和更多选项现在通过其他方式进行配置。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
如果您的应用程序主要与映射的实体或原始 Java 类型交互,Spring Data for Apache Cassandra 会将驱动程序升级带来的大部分更改封装为模板 API 和存储库支持。
我们通常建议使用 create 和 objects ,因为工厂用法允许同步架构创建,并在使用多个数据库时引入了一定程度的灵活性。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 -
包含 async 和 reactive 变体的实现
PreparedStatementCreator -
调用
CqlTemplate.queryForResultSet(…) -
调用接受
Statement
更改AsyncCqlTemplate
DataStax 驱动程序 4 更改了异步运行的查询的结果类型。 为了反映这些更改,您需要调整提供以下内容的代码:
-
的实现
AsyncSessionCallback -
的实现
AsyncPreparedStatementCreator
结果集提取需要 DataStax 的新接口。 现在用于以前使用 .
请注意,返回 a 而不是标量对象,因此代码迁移可以在提取器中使用完全非阻塞的代码。AsyncResultSetAsyncCqlTemplateAsyncResultSetExtractorResultSetExtractorAsyncResultSetExtractor.extractData(…)Future
数据模型迁移
其他更改
-
Driver 的常量类已删除,并作为 . 被改编成 。
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,请改用 USE。CqlSessionFactoryBean -
KeyspaceIdentifier和 ,请改用。CqlIdentifiercom.datastax.oss.driver.api.core.CqlIdentifier -
CassandraSessionFactoryBean,请改用 USE。CqlSessionFactoryBean -
AbstractCqlTemplateConfiguration,请改用 USE。AbstractSessionConfiguration -
AbstractSessionConfiguration.getClusterName(),请改用 USE。AbstractSessionConfiguration.getSessionName() -
CodecRegistryTupleTypeFactory,请改用 USE。SimpleTupleTypeFactory -
Spring Data 的 ,请改用驱动程序。
CqlIdentifierCqlIdentifier -
forceQuoteattributes 作为引号。 正确转义保留关键字并注意区分大小写。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
Utilities
-
GuavaListenableFutureAdapter -
QueryOptions以及构造函数采用和参数。 将生成器与执行配置文件结合使用作为替换。WriteOptionsConsistencyLevelRetryPolicy -
CassandraAccessor.setRetryPolicy(…)和方法。 使用执行配置文件作为替换。ReactiveCqlTemplate.setRetryPolicy(…)
Namespace 支持
-
cqlnamespace (, use instead)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。 这些必须显式声明。