從 2.x 遷移到 3.x 的指南

Spring Data for Apache Cassandra 3.0 在從早期版本升級時引入了一系列重大更改。

審查依賴項

升級到 Spring Data Cassandra 需要升級到 DataStax Driver 版本 4。升級到新驅動程式會帶來傳遞依賴項更改,最值得注意的是,Google Guava 由驅動程式捆綁和遮蔽。請檢視 DataStax Java Driver for Apache Cassandra 4 升級指南 以獲取有關驅動程式相關更改的詳細資訊。

調整配置

DataStax Java Driver 4 將 ClusterSession 物件合併到一個 CqlSession 物件中,因此,所有 Cluster 相關 API 都已刪除。配置在很大程度上進行了修訂,刪除了大部分已移入 DriverConfigLoader 的配置項,而 DriverConfigLoader 大部分是基於檔案的。這意味著 SocketOptionsAddressTranslator 和更多選項現在透過其他方式進行配置。

如果您正在使用基於 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)。

為了反映配置構建器的變化,ClusterBuilderConfigurer 被重新命名為 SessionBuilderConfigurer,現在接受 CqlSessionBuilder 而不是 Cluster.Builder。請確保在配置中提供本地資料中心,因為它是在正確配置負載均衡時所必需的。

連線性

Cluster (cassandra:cluster) 和 Session (cassandra:session) 的配置元素合併到一個 CqlSession (cassandra:session) 元素中,該元素同時配置鍵空間和端點。

隨著升級,模式支援已移至新的名稱空間元素:cassandra:session-factory,它提供了一個 SessionFactory bean。

示例 1. 版本 2 中的叢集、會話和模式配置
<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>
示例 2. 版本 3 中的會話和模式配置
<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 名稱空間配置時不再註冊預設的對映上下文、上下文和模板 API bean。預設值應在應用程式或 Spring Boot 級別應用。

模板 API

如果您的應用程式主要與對映實體或基本 Java 型別互動,Spring Data for Apache Cassandra 封裝了大部分隨驅動程序升級而來的更改,包括模板 API 和儲存庫支援。

我們通常建議使用 SessionFactory 建立 CqlTemplateCassandraTemplate 物件,因為工廠使用允許模式建立同步,並在使用多個數據庫時引入了一定程度的靈活性。

示例 3. 版本 2 中的模板 API 配置
<cql:template session-ref="…" />

<cassandra:template session-ref="…" cassandra-converter-ref="…"/>
示例 4. 版本 3 中的模板 API 配置
<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 現在在以前使用 ResultSetExtractor 的地方使用 AsyncResultSetExtractor。請注意,AsyncResultSetExtractor.extractData(…) 返回一個 Future 而不是標量物件,因此程式碼遷移帶來了在提取器中使用完全非阻塞程式碼的可能性。

資料模型遷移

如果您使用以下功能,您的資料模型可能需要更新

  • @CassandraType

  • @Table@Column@PrimaryKeyColumn@PrimaryKey@UserDefinedType 中的 forceQuote

  • 使用 java.lang.Date 的屬性

  • 使用 UDTValueTupleValue 的屬性

@CassandraType

DataStax 驅動程式 4 不再附帶用於描述 Cassandra 型別的 Name 列舉。我們決定重新引入帶有 CassandraType.Name 的列舉。請務必更新您的匯入以使用新引入的替換型別。

強制引用

此標誌現已棄用,我們建議不再使用它。Spring Data for Apache Cassandra 內部使用驅動程式的 CqlIdentifier,它確保在需要時進行引用。

屬性型別

DataStax 驅動程式 4 不再使用 java.lang.Date。請將您的資料模型升級為使用 java.time.LocalDateTime。還請將原始 UDT 和元組型別遷移到新的驅動程式型別 UdtValueTupleValue

其他更改

  • 驅動程式的 ConsistencyLevel 常量類已刪除,並重新引入為 DefaultConsistencyLevel@Consistency 已適配為 DefaultConsistencyLevel

  • QueryOptions…CqlTemplate 型別上的 RetryPolicy 已刪除,沒有替代品。

  • 驅動程式的 PagingState 型別已刪除。分頁狀態現在使用 ByteBuffer

  • SimpleUserTypeResolver 接受 CqlSession 而不是 Cluster

  • SimpleTupleTypeFactory 已遷移到 enumSimpleTupleTypeFactory.INSTANCE 不再需要 Cluster/CqlSession 上下文。

  • 引入 StatementBuilder 以函式式構建語句,因為 QueryBuilder API 使用不可變語句型別。

  • Session bean 從 session 重新命名為 cassandraSessionSessionFactory bean 從 sessionFactory 重新命名為 cassandraSessionFactory

  • ReactiveSession bean 從 reactiveSession 重新命名為 reactiveCassandraSessionReactiveSessionFactory 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

  • KeyspaceIdentifierCqlIdentifier,請改用 com.datastax.oss.driver.api.core.CqlIdentifier

  • CassandraSessionFactoryBean,請改用 CqlSessionFactoryBean

  • AbstractCqlTemplateConfiguration,請改用 AbstractSessionConfiguration

  • AbstractSessionConfiguration.getClusterName(),請改用 AbstractSessionConfiguration.getSessionName()

  • CodecRegistryTupleTypeFactory,請改用 SimpleTupleTypeFactory

  • Spring Data 的 CqlIdentifier,請改用驅動程式的 CqlIdentifier

  • forceQuote 屬性,因為不再需要引用。CqlIdentifier 正確轉義保留關鍵字並處理大小寫敏感性。

  • QueryOptions…CqlTemplate 型別上的 fetchSize 已棄用,請改用 pageSize

  • CassandraMappingContext.setUserTypeResolver(…)CassandraMappingContext.setCodecRegistry(…)CassandraMappingContext.setCustomConversions(…):在 CassandraConverter 上配置這些屬性。

  • TupleTypeFactoryCassandraMappingContext.setTupleTypeFactory(…)TupleTypeFactory 不再使用,因為 Cassandra 驅動程式附帶了一個 DataTypes.tupleOf(…) 工廠方法。

  • 透過 CqlSessionFactoryBean (cassandra:session) 建立模式已棄用。透過 CqlSessionFactoryBean (cassandra:session) 建立鍵空間不受影響。

移除

配置 API

  • PoolingOptionsFactoryBean

  • SocketOptionsFactoryBean

  • CassandraClusterFactoryBean

  • CassandraClusterParser

  • CassandraCqlClusterFactoryBean

  • CassandraCqlClusterParser

  • CassandraCqlSessionParser

  • AbstractClusterConfiguration

  • ClusterBuilderConfigurer(請改用 SessionBuilderConfigurer

實用程式

  • GuavaListenableFutureAdapter

  • QueryOptionsWriteOptions 建構函式接受 ConsistencyLevelRetryPolicy 引數。請改用構建器結合執行配置檔案。

  • CassandraAccessor.setRetryPolicy(…)ReactiveCqlTemplate.setRetryPolicy(…) 方法。請改用執行配置檔案。

名稱空間支援

新增

配置 API

  • CqlSessionFactoryBean

  • InitializeKeyspaceBeanDefinitionParser

  • SessionFactoryFactoryBean,包括透過 KeyspacePopulator 建立模式

  • KeyspacePopulatorSessionFactoryInitializer 用於初始化鍵空間

名稱空間支援

  • cassandra:cluster(端點屬性合併到 cassandra:session

  • cassandra:initialize-keyspace 名稱空間支援

  • cassandra:session-factorycassandra:script 支援

© . This site is unofficial and not affiliated with VMware.