此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Cassandra 4.4.0! |
从 2.x 到 3.x 的迁移指南
Spring Data for Apache Cassandra 3.0 在从早期版本升级时引入了一组重大更改。
查看依赖项
升级到 Spring Data Cassandra 需要升级到 DataStax 驱动程序版本 4。升级到新驱动程序会带来传递依赖项更改,最值得注意的是,Google Guava 由驱动程序捆绑和着色。 有关驱动程序相关更改的详细信息,请参阅《DataStax Java Driver for Apache Cassandra 4 升级指南》。
调整配置
DataStax Java 驱动程序 4 合并Cluster
和Session
对象合并到单个CqlSession
object,因此,所有Cluster
已删除。
通过删除大多数已移动到DriverConfigLoader
这主要是基于文件的。
这意味着SocketOptions
,AddressTranslator
现在通过其他方式配置了更多选项。
如果您使用的是基于 XML 的配置,请确保从cql
namespace (www.springframework.org/schema/cql www.springframework.org/schema/cql/spring-cql.xsd
) 到cassandra
namespace (www.springframework.org/schema/data/cassandra www.springframework.org/schema/data/cassandra/spring-cassandra.xsd
).
为了反映配置生成器中的更改,ClusterBuilderConfigurer
已重命名为SessionBuilderConfigurer
现在接受CqlSessionBuilder
而不是Cluster.Builder
.
请确保在配置中还提供本地数据中心,因为这是正确配置负载均衡所必需的。
连接
的配置元素Cluster
(cassandra:cluster
) 和Session
(cassandra:session
) 合并为一个CqlSession
(cassandra:session
) 元素,该元素配置 keyspace 和 endpoints。
升级后,架构支持已移至新的 namespace 元素:cassandra:session-factory
,它提供了一个SessionFactory
豆。
<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 级别。 |
模板 API
如果您的应用程序主要与映射的实体或原始 Java 类型交互,Spring Data for Apache Cassandra 会将驱动程序升级带来的大部分更改封装为模板 API 和存储库支持。
我们通常建议创建CqlTemplate
和CassandraTemplate
对象SessionFactory
由于工厂使用允许同步架构创建,并在使用多个数据库时引入了一定程度的灵活性。
<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
包括 async 和 reactive 变体 -
调用
CqlTemplate.queryForResultSet(…)
-
调用接受
Statement
更改AsyncCqlTemplate
DataStax 驱动程序 4 更改了异步运行的查询的结果类型。 为了反映这些更改,您需要调整提供以下内容的代码:
-
的实现
AsyncSessionCallback
-
的实现
AsyncPreparedStatementCreator
结果集提取需要 DataStax 的新接口AsyncResultSet
.AsyncCqlTemplate
现在使用AsyncResultSetExtractor
在它以前使用的地方ResultSetExtractor
.
请注意,AsyncResultSetExtractor.extractData(…)
返回Future
而不是标量对象,因此代码迁移可以在提取器中使用完全非阻塞的代码。
数据模型迁移
其他更改
-
驾驶员
ConsistencyLevel
常量类被删除并重新引入为DefaultConsistencyLevel
.@Consistency
被改编成DefaultConsistencyLevel
. -
RetryPolicy
上QueryOptions
和…CqlTemplate
types 被删除而没有替换。 -
Drivers
PagingState
type 已删除。 Paging 状态现在使用ByteBuffer
. -
SimpleUserTypeResolver
接受CqlSession
而不是Cluster
. -
SimpleTupleTypeFactory
已迁移到enum
.SimpleTupleTypeFactory.INSTANCE
不再需要Cluster
/CqlSession
上下文。 -
简介
StatementBuilder
在功能上构建语句,因为 QueryBuilder API 使用不可变的语句类型。 -
Session
Bean 已从session
自cassandraSession
和SessionFactory
Bean 已从sessionFactory
自cassandraSessionFactory
. -
ReactiveSession
Bean 已从reactiveSession
自reactiveCassandraSession
和ReactiveSessionFactory
Bean 已从reactiveSessionFactory
自reactiveCassandraSessionFactory
. -
ReactiveSessionFactory.getSession()
现在返回一个Mono<ReactiveSession>
. 以前,它只返回ReactiveSession
. -
数据类型解析已移至
ColumnTypeResolver
所以所有人DataType
-相关方法已从CassandraPersistentEntity
/CassandraPersistentProperty
到ColumnTypeResolver
(受影响的方法是MappingContext.getDataType(…)
,CassandraPersistentProperty.getDataType()
,CassandraPersistentEntity.getUserType()
和CassandraPersistentEntity.getTupleType()
). -
架构创建已从
MappingContext
自SchemaFactory
(受影响的方法是CassandraMappingContext.getCreateTableSpecificationFor(…)
,CassandraMappingContext.getCreateIndexSpecificationsFor(…)
和CassandraMappingContext.getCreateUserTypeSpecificationFor(…)
).
弃用
-
CassandraCqlSessionFactoryBean
用CqlSessionFactoryBean
相反。 -
KeyspaceIdentifier
和CqlIdentifier
用com.datastax.oss.driver.api.core.CqlIdentifier
相反。 -
CassandraSessionFactoryBean
用CqlSessionFactoryBean
相反。 -
AbstractCqlTemplateConfiguration
用AbstractSessionConfiguration
相反。 -
AbstractSessionConfiguration.getClusterName()
用AbstractSessionConfiguration.getSessionName()
相反。 -
CodecRegistryTupleTypeFactory
用SimpleTupleTypeFactory
相反。 -
Spring Data 的
CqlIdentifier
,使用驱动程序CqlIdentifier
相反。 -
forceQuote
attributes 作为引号。CqlIdentifier
正确转义保留关键字并注意区分大小写。 -
fetchSize
上QueryOptions
和…CqlTemplate
types 已弃用,请使用pageSize
相反 -
CassandraMappingContext.setUserTypeResolver(…)
,CassandraMappingContext.setCodecRegistry(…)
和CassandraMappingContext.setCustomConversions(…)
:配置这些属性CassandraConverter
. -
TupleTypeFactory
和CassandraMappingContext.setTupleTypeFactory(…)
:TupleTypeFactory
不再使用,因为 Cassandra 驱动程序附带了DataTypes.tupleOf(…)
Factory 方法。 -
通过 Schema 创建
CqlSessionFactoryBean
(cassandra:session
) 已弃用。 Keyspace 创建 方式CqlSessionFactoryBean
(cassandra:session
) 不受影响。
清除
配置 API
-
PoolingOptionsFactoryBean
-
SocketOptionsFactoryBean
-
CassandraClusterFactoryBean
-
CassandraClusterParser
-
CassandraCqlClusterFactoryBean
-
CassandraCqlClusterParser
-
CassandraCqlSessionParser
-
AbstractClusterConfiguration
-
ClusterBuilderConfigurer
(使用SessionBuilderConfigurer
相反
Utilities
-
GuavaListenableFutureAdapter
-
QueryOptions
和WriteOptions
构造函数采用ConsistencyLevel
和RetryPolicy
参数。 将生成器与执行配置文件结合使用作为替换。 -
CassandraAccessor.setRetryPolicy(…)
和ReactiveCqlTemplate.setRetryPolicy(…)
方法。 使用执行配置文件作为替换。
命名空间支持
-
cql
namespace (www.springframework.org/schema/cql
用www.springframework.org/schema/data/cassandra
相反) -
cassandra:cluster
(终端节点属性已合并到cassandra:session
) -
cql:template
用cassandra:cql-template
相反 -
删除了隐式 Bean 注册 Mapping Context、Context 和 Template API Bean。 这些必须显式声明。