Migration Guide from 2.x to 3.x
-
升级至 DataStax 驱动程序 4,带来了依赖项更改和配置调整。
-
Cluster 和 Session 对象合并,简化了配置。
-
架构支持迁移到 cassandra:session-factory 命名空间元素。
-
映射上下文、上下文和模板 API Bean 需要显式声明。
-
某些数据模型功能(如 @CassandraType)需要更新。
-
代码必须针对 DataStax 驱动程序 4 的 API 更改进行调整。
-
弃用了某些功能,并引入了新的功能(如 StatementBuilder 和 KeyspacePopulator)。
3.0 版用于 Apache Cassandra 的 Spring Data 在从较早版本升级时引入了一组重大更改。
Review dependencies
升级到 Spring Data Cassandra 需要升级到 DataStax Driver 版本 4。升级到新驱动程序会带来瞬态依赖项更改,最明显的是,Google Guava 已被驱动程序捆绑并遮蔽。有关与驱动程序相关的更改的详细信息,请查看 DataStax Java Driver for Apache Cassandra 4 Upgrade Guide。
Adapt Configuration
DataStax Java Driver 4 将 Cluster
和 Session
对象合并成单个 CqlSession
对象,因此已删除所有与 Cluster
相关的 API。配置已通过移除大多数已移至 DriverConfigLoader
(主要基于文件)中的配置项进行了大范围修订。这意味着现在通过其他方式配置了 SocketOptions
、AddressTranslator
和更多选项。
如果你使用基于 XML 的配置,请务必将所有配置文件从 cql`名称空间 (`http://www.springframework.org/schema/cql [role="bare"]https://www.springframework.org/schema/cql/spring-cql.xsd
) 迁移到 cassandra`名称空间 (`http://www.springframework.org/schema/data/cassandra [role="bare"]https://www.springframework.org/schema/data/cassandra/spring-cassandra.xsd
)。
为了反映配置构建器的变更,ClusterBuilderConfigurer
已重命名为 SessionBuilderConfigurer
,现在接受 CqlSessionBuilder
而不是 Cluster.Builder
。请务必在配置中提供本地数据中心,因为它对于正确配置负载平衡是必需的。
Connectivity
Cluster
(cassandra:cluster
)和 Session
(cassandra:session
)的配置元素已合并到一个 CqlSession
(cassandra:session
)元素中,该元素配置了键空间和端点。
在升级时,架构支持已移至新的命名空间元素:cassandra:session-factory
,该元素提供了 SessionFactory
Bean。
<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>
在使用 XML 命名空间配置时,Spring Data Cassandra 3.0 不再注册默认映射上下文、上下文和模板 API bean。应在应用程序或 Spring Boot 级别上应用默认值。 |
Template API
如果你应用程序主要与映射实体或原始 Java 类型进行交互,那么用于 Apache Cassandra 的 Spring Data 封装了大多数随 Driver 升级而来的更改,如 Template API 和存储库支持。
我们通常建议使用 SessionFactory
创建 CqlTemplate
和 CassandraTemplate
对象,因为工厂用法允许同步以创建架构,并在处理多个数据库时引入了一定程度的灵活性。
<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 Driver API 的地方都必须调整你的代码。典型情况包括:
-
Implementations of
ResultSetExtractor
-
Implementations of
RowCallbackHandler
-
Implementations of
RowMapper
-
实现
PreparedStatementCreator
,包括异步和反应式变体 -
Calls to
CqlTemplate.queryForResultSet(…)
-
调用接受
Statement
的方法
Changes in AsyncCqlTemplate
DataStax Driver 4 已更改了异步运行的查询的结果类型。为了反映这些更改,你需要调整你的代码,以提供:
-
Implementations of
AsyncSessionCallback
-
Implementations of
AsyncPreparedStatementCreator
结果集提取需要一个新接口,用于 DataStax 的 AsyncResultSet
。现 AsyncCqlTemplate
在它以前使用 ResultSetExtractor
的位置使用 AsyncResultSetExtractor
。请注意,AsyncResultSetExtractor.extractData(…)
返回 Future
而不是标量对象,因此代码迁移为提取器使用完全非阻塞代码提供了可能性。
Data model migrations
如果使用以下功能,则你的数据模型可能需要更新:
-
@CassandraType
-
forceQuote
中的@Table
、@Column
、@PrimaryKeyColumn
、@PrimaryKey
和@UserDefinedType
-
Properties using
java.lang.Date
-
使用
UDTValue
或TupleValue
的属性
@CassandraType
DataStax Driver 4 不再使用 Name
枚举来描述 Cassandra 类型。我们决定使用 CassandraType.Name
重新引入枚举。请务必更新你的导入以使用新引入的替换类型。
Other changes
-
驱动程序的
ConsistencyLevel
常量类已被删除并重新引入为DefaultConsistencyLevel
。@Consistency
已调整为DefaultConsistencyLevel
。 -
RetryPolicy
中QueryOptions
和…CqlTemplate
类型的类型已被删除,未替换。 -
驱动程序的
PagingState
类型已删除。分页状态现在使用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(…)
)。
Deprecations
-
CassandraCqlSessionFactoryBean
, useCqlSessionFactoryBean
instead. -
KeyspaceIdentifier
和CqlIdentifier
,改为使用com.datastax.oss.driver.api.core.CqlIdentifier
。 -
CassandraSessionFactoryBean
, useCqlSessionFactoryBean
instead. -
AbstractCqlTemplateConfiguration
, useAbstractSessionConfiguration
instead. -
AbstractSessionConfiguration.getClusterName()
, useAbstractSessionConfiguration.getSessionName()
instead. -
CodecRegistryTupleTypeFactory
, useSimpleTupleTypeFactory
instead. -
Spring Data 的
CqlIdentifier
,改为使用驱动程序CqlIdentifier
。 -
forceQuote
属性因为引用不再是必需的。CqlIdentifier
正确转义保留的关键字并注意大小写敏感性。 -
fetchSize
inQueryOptions
和…CqlTemplate
类型已弃用,请使用pageSize
-
CassandraMappingContext.setUserTypeResolver(…)
、CassandraMappingContext.setCodecRegistry(…)
和CassandraMappingContext.setCustomConversions(…)
:在CassandraConverter
上配置这些属性。 -
TupleTypeFactory
和CassandraMappingContext.setTupleTypeFactory(…)
:TupleTypeFactory
不再使用,因为 Cassandra 驱动程序提供了一个DataTypes.tupleOf(…)
工厂方法。 -
通过
CqlSessionFactoryBean
(cassandra:session
)创建 Schema 已弃用而通过CqlSessionFactoryBean
(cassandra:session
)创建 Keyspace 不会受到影响。
Removals
Configuration API
-
PoolingOptionsFactoryBean
-
SocketOptionsFactoryBean
-
CassandraClusterFactoryBean
-
CassandraClusterParser
-
CassandraCqlClusterFactoryBean
-
CassandraCqlClusterParser
-
CassandraCqlSessionParser
-
AbstractClusterConfiguration
-
ClusterBuilderConfigurer
(useSessionBuilderConfigurer
instead
Utilities
-
GuavaListenableFutureAdapter
-
QueryOptions
和WriteOptions
构造函数获取ConsistencyLevel
和RetryPolicy
参数。使用构建器结合执行配置文件作为替换。 -
CassandraAccessor.setRetryPolicy(…)
和ReactiveCqlTemplate.setRetryPolicy(…)
方法。使用执行配置文件作为替换。
Namespace support
-
cql
命名空间(http://www.springframework.org/schema/cql
,请改为使用http://www.springframework.org/schema/data/cassandra
) -
cassandra:cluster
(端点属性合并到cassandra:session
) -
cql:template
, usecassandra:cql-template
instead -
删除了隐式 Bean 注册映射上下文、上下文和模板 API Bean。这些必须显式声明。