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。
通过删除大多数移动到的配置项(主要是基于文件的配置项),对配置进行了大量修改。
这意味着 ,现在通过其他方式配置了更多选项。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 级别。 |
Spring Data Cassandra 3.0 在使用 XML 命名空间配置时不再注册默认的 Mapping Context、Context 和 Template API bean。 默认值应应用于应用程序或 Spring Boot 级别。 |
模板 API
Spring Data for Apache Cassandra 封装了驱动程序升级带来的大多数更改,如果您的应用程序主要与映射实体或原始 Java 类型交互,则提供模板 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
-
调用
CqlTemplate.queryForResultSet(…)
-
调用接受的方法
Statement
变化AsyncCqlTemplate
DataStax 驱动程序 4 更改了异步运行的查询的结果类型。 为了反映这些更改,您需要调整提供以下功能的代码:
-
的实现
AsyncSessionCallback
-
的实现
AsyncPreparedStatementCreator
结果集提取需要 DataStax 的新接口。 现在在以前使用的地方使用。
请注意,它返回一个而不是标量对象,因此代码的迁移可以在提取器中使用完全非阻塞的代码。AsyncResultSet
AsyncCqlTemplate
AsyncResultSetExtractor
ResultSetExtractor
AsyncResultSetExtractor.extractData(…)
Future
数据模型迁移
其他更改
-
驱动程序的常量类已被删除,并重新引入为 。 已适应.
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
,请改用。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
不再需要引用的属性。 正确转义保留关键字并注意区分大小写。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
公用事业
-
GuavaListenableFutureAdapter
-
QueryOptions
以及构造函数获取和参数。 将构建器与执行配置文件结合使用作为替换。WriteOptions
ConsistencyLevel
RetryPolicy
-
CassandraAccessor.setRetryPolicy(…)
和方法。 使用执行配置文件作为替换。ReactiveCqlTemplate.setRetryPolicy(…)
命名空间支持
-
cql
命名空间 (,改用)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。 这些必须明确声明。