2.x から 3.x への移行ガイド
Apache Cassandra 3.0 用の Spring Data では、以前のバージョンからアップグレードするときに、一連の重大な変更が導入されます。
依存関係を確認する
Spring Data Cassandra へのアップグレードには、DataStax ドライバーバージョン 4 へのアップグレードが必要です。新しいドライバーへのアップグレードには、推移的な依存関係の変更が伴います。最も注目すべき点は、Google Guava がドライバーによってバンドルされ、シェーディングされることです。ドライバー関連の変更の詳細については、Apache Cassandra 4 用 DataStax Java ドライバーアップグレードガイド (英語) を確認してください。
構成の適応
DataStax Java Driver 4 は、Cluster オブジェクトと Session オブジェクトを単一の CqlSession オブジェクトにマージするため、Cluster 関連の API はすべて削除されました。大部分がファイルベースである 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 (英語) ) に移行してください。
構成ビルダーの変更を反映するために、ClusterBuilderConfigurer は SessionBuilderConfigurer に名前変更され、Cluster.Builder の代わりに CqlSessionBuilder が受け入れられるようになりました。ロードバランシングを適切に構成するにはローカルデータセンターも必要となるため、構成にローカルデータセンターも必ず指定してください。
接続
Cluster (cassandra:cluster) および Session (cassandra:session) の構成要素は、キースペースとエンドポイントの両方を構成する単一の CqlSession (cassandra:session) 要素にマージされました。
アップグレードにより、スキーマサポートは、SessionFactory Bean を提供する新しい名前空間要素 cassandra:session-factory に移動されました。
<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 名前空間構成を使用する場合、デフォルトのマッピングコンテキスト、コンテキスト、テンプレート API Bean を登録しなくなりました。デフォルト設定はアプリケーションまたは Spring Boot レベルで適用する必要があります。 |
テンプレート API
アプリケーションが主にマップされたエンティティまたはプリミティブ Java 型と対話する場合、Apache Cassandra 用の Spring Data は、ドライバーのアップグレードに伴う変更のほとんどをテンプレート 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 ドライバー 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のforceQuotejava.lang.Dateを使用したプロパティUDTValueまたはTupleValueを使用したプロパティ
@CassandraType
DataStax ドライバー 4 には、Cassandra 型を記述する Name 列挙が同梱されなくなりました。CassandraType.Name による列挙を再導入することにしました。新しく導入された置換型を使用するようにインポートを更新してください。
その他の変更点
ドライバーの
ConsistencyLevel定数クラスは削除され、DefaultConsistencyLevelとして再導入されました。@ConsistencyはDefaultConsistencyLevelに適応されました。QueryOptionsおよび… CqlTemplate型のRetryPolicyは交換せずに削除されました。ドライバーの
PagingState型は削除されました。ページング状態ではByteBufferが使用されるようになりました。SimpleUserTypeResolverは、Clusterの代わりにCqlSessionを受け入れます。SimpleTupleTypeFactoryはenumに移行されました。SimpleTupleTypeFactory.INSTANCEはCluster/CqlSessionコンテキストを必要としなくなりました。QueryBuilder API が不変のステートメント型を使用するため、ステートメントを関数に構築するための
StatementBuilderの導入。SessionBean はsessionからcassandraSessionに名前変更され、SessionFactoryBean はsessionFactoryからcassandraSessionFactoryに名前変更されました。ReactiveSessionBean はreactiveSessionからreactiveCassandraSessionに名前変更され、ReactiveSessionFactoryBean は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は予約キーワードを適切にエスケープし、大文字と小文字を区別します。QueryOptionsおよび… CqlTemplate型のfetchSizeは非推奨になりました。代わりにpageSizeを使用してくださいCassandraMappingContext.setUserTypeResolver(…)、CassandraMappingContext.setCodecRegistry(…)、CassandraMappingContext.setCustomConversions(…): これらのプロパティをCassandraConverterで構成します。TupleTypeFactoryおよびCassandraMappingContext.setTupleTypeFactory(…): Cassandra ドライバーはDataTypes.tupleOf(…)ファクトリメソッドで提供されるため、TupleTypeFactoryは使用されなくなりました。CqlSessionFactoryBean(cassandra:session) によるスキーマの作成は非推奨になりました。CqlSessionFactoryBean(cassandra:session) によるキースペースの作成は影響を受けません。
削除
構成 API
PoolingOptionsFactoryBeanSocketOptionsFactoryBeanCassandraClusterFactoryBeanCassandraClusterParserCassandraCqlClusterFactoryBeanCassandraCqlClusterParserCassandraCqlSessionParserAbstractClusterConfigurationClusterBuilderConfigurer(代わりにSessionBuilderConfigurerを使用してください)
ユーティリティ
GuavaListenableFutureAdapterConsistencyLevelおよびRetryPolicy引数を取るQueryOptionsおよびWriteOptionsコンストラクター。ビルダーを実行プロファイルと組み合わせて置き換えとして使用します。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 登録マッピングコンテキスト、コンテキスト、テンプレート API Bean を削除しました。これらは明示的に宣言する必要があります。