此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 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 Driver 4 将对象合并为一个对象,因此,所有相关的 API 都已删除。
通过删除大多数主要基于文件的配置项,对配置进行了大部分修改。
这意味着 和更多选项现在通过其他方式进行配置。Cluster
Session
CqlSession
Cluster
DriverConfigLoader
SocketOptions
AddressTranslator
如果你使用的是基于 XML 的配置,请确保将所有配置文件从命名空间 () 迁移到命名空间 () 。cql
www.springframework.org/schema/cql www.springframework.org/schema/cql/spring-cql.xsd
cassandra
www.springframework.org/schema/data/cassandra www.springframework.org/schema/data/cassandra/spring-cassandra.xsd
为了反映配置生成器中的更改,已重命名为 accept now,而不是 .
请确保在配置中还提供本地数据中心,因为这是正确配置负载均衡所必需的。ClusterBuilderConfigurer
SessionBuilderConfigurer
CqlSessionBuilder
Cluster.Builder
连接
() 和 () 的配置元素合并为一个 () 元素,该元素配置键空间和端点。Cluster
cassandra:cluster
Session
cassandra:session
CqlSession
cassandra:session
通过升级,架构支持被移动到一个新的命名空间元素:它提供了一个 bean。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 和存储库支持。
我们通常建议使用 create 和 objects ,因为工厂用法允许同步架构创建,并在使用多个数据库时引入了一定程度的灵活性。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
-
包含 async 和 reactive 变体的实现
PreparedStatementCreator
-
调用
CqlTemplate.queryForResultSet(…)
-
调用接受
Statement
更改AsyncCqlTemplate
DataStax 驱动程序 4 更改了异步运行的查询的结果类型。 为了反映这些更改,您需要调整提供以下内容的代码:
-
的实现
AsyncSessionCallback
-
的实现
AsyncPreparedStatementCreator
结果集提取需要 DataStax 的新接口。 现在用于以前使用 .
请注意,返回 a 而不是标量对象,因此代码迁移可以在提取器中使用完全非阻塞的代码。AsyncResultSet
AsyncCqlTemplate
AsyncResultSetExtractor
ResultSetExtractor
AsyncResultSetExtractor.extractData(…)
Future
数据模型迁移
其他更改
-
Driver 的常量类已删除,并作为 . 被改编成 。
ConsistencyLevel
DefaultConsistencyLevel
@Consistency
DefaultConsistencyLevel
-
RetryPolicy
on 和 types 被删除而不进行替换。QueryOptions
…CqlTemplate
-
已删除驱动程序的类型。 分页状态现在使用 .
PagingState
ByteBuffer
-
SimpleUserTypeResolver
接受而不是 .CqlSession
Cluster
-
SimpleTupleTypeFactory
已迁移到 。 不再需要 / 上下文。enum
SimpleTupleTypeFactory.INSTANCE
Cluster
CqlSession
-
引入了功能构建语句,因为 QueryBuilder API 使用不可变的语句类型。
StatementBuilder
-
Session
Bean 已从 to 重命名,Bean 已从 to 重命名为 。session
cassandraSession
SessionFactory
sessionFactory
cassandraSessionFactory
-
ReactiveSession
Bean 已从 to 重命名,Bean 已从 to 重命名为 。reactiveSession
reactiveCassandraSession
ReactiveSessionFactory
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
,请改用 USE。CqlSessionFactoryBean
-
KeyspaceIdentifier
和 ,请改用。CqlIdentifier
com.datastax.oss.driver.api.core.CqlIdentifier
-
CassandraSessionFactoryBean
,请改用 USE。CqlSessionFactoryBean
-
AbstractCqlTemplateConfiguration
,请改用 USE。AbstractSessionConfiguration
-
AbstractSessionConfiguration.getClusterName()
,请改用 USE。AbstractSessionConfiguration.getSessionName()
-
CodecRegistryTupleTypeFactory
,请改用 USE。SimpleTupleTypeFactory
-
Spring Data 的 ,请改用驱动程序。
CqlIdentifier
CqlIdentifier
-
forceQuote
attributes 作为引号。 正确转义保留关键字并注意区分大小写。CqlIdentifier
-
fetchSize
on 和 types 已弃用,请改用QueryOptions
…CqlTemplate
pageSize
-
CassandraMappingContext.setUserTypeResolver(…)
、 和 :在 上配置这些属性。CassandraMappingContext.setCodecRegistry(…)
CassandraMappingContext.setCustomConversions(…)
CassandraConverter
-
TupleTypeFactory
和 : 不再使用,因为 Cassandra 驱动程序附带了工厂方法。CassandraMappingContext.setTupleTypeFactory(…)
TupleTypeFactory
DataTypes.tupleOf(…)
-
通过 () 创建架构已弃用。 通过 () 创建的密钥空间不受影响。
CqlSessionFactoryBean
cassandra:session
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 (, use instead)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。 这些必须显式声明。