見ると、コースの詳細を知ることができます。
Spring Data Neumannは、新しい6か月のリリースサイクルへの移行以来の最初のリリースです。リリース間の時間を短縮することで、新しい機能をより頻繁にリリースできるようになり、その結果、スピードも向上します。このリリースでは、新機能に加えて、以前のバージョンとの互換性を損なう可能性のある重要な変更もあります。
メジャーバージョンの変更
以下にリストされているプロジェクトでは、パブリックAPIまたはドライバーの互換性を損なう変更により、メジャーバージョン番号が増加しています。
- Spring Data JDBC 2.0(以前のバージョン1.1)
- 1.1から2.0への移行については、この投稿で説明しています。
- Spring Data MongoDB 3.0(以前のバージョン2.2)
- Apache Cassandra 3.0のSpringデータ(以前のバージョン2.2)
- Spring Data Couchbase 4.0(以前のバージョン3.2)
- Spring Data Elasticsearch 4.0(以前のバージョン3.2)
- 変更の詳細については、この投稿を参照してください。
新しい機能の説明に移る前に、APIの変更点を見てみましょう。詳細については、各モジュールのドキュメントの「アップグレード」セクションを参照してください。
今すぐ更新する準備ができていない場合は、以前のMooreリリースがさらに12か月間サポートされることに注意してください。
JDBC
各SQLストレージには、特別なアプローチを必要とする独自の特性があります。彼らのサポートを改善するために、メジャーバージョンの増加に影響を与える変更が行われました。現在、
AbstractJdbcConfigurationデフォルトでは、Dialect指定DataSourceまたは登録されたからデータベースを識別しようとしますDialectResolver。デフォルトでは、JDBCモジュールには、H2、HSQLDB、MySQL、Postgres、MariaDB、Microsoft SqlServer、およびDB2のダイアレクトが付属しています。Spring Data JDBCは、デフォルトですべてのテーブル名と列名をエスケープするようになりました。これにより、自分CREATE TABLEや注釈が変更される可能性がありますが@Column、オブジェクトの命名の柔軟性が高まります。
MongoDB
MongoDB用のドライバー(mongo-java-driver)を含む単一のjarは、-syncと-reactivestreamsに分割され、必要なドライバーのみを選択できます。つまり、同期ドライバーとリアクティブMongoDBドライバーの両方がオプションの依存関係になり、手動で追加する必要があります。新しいドライバーへの移行に伴い、すでに非推奨となっているAPIの一部が完全に削除され、SpringData
AbstractMongoConfigurationによって提供されるXML名前空間などの構成クラスに影響を与えました。詳細については、ドキュメントのアップグレードセクションを参照してください。
アパッチカサンドラ
Apache Cassandraドライバーの4.0への長い間延期された更新は、パッケージとデータ構造を更新するだけでなく、クラスターとセッション処理の動作も変更します。これにより、XML構成に影響を与える主要な構成変更が発生し、一部の複雑なシナリオ(単純なデフォルト設定よりも難しい)のコードの構成に影響を与える可能性があります
AbstractCassandraConfiguration。
カウチベース
Couchbase SDKに続いて、3.xから4.xにアップグレードしました。これにより、自動インデックス管理とトランザクションサポートが追加されます。詳細については、Couchbaseブログをご覧ください。
Elasticsearch
HTTPクライアントAPI、SSL、およびプロキシのサポートが追加されました。メジャーバージョン番号の変更に影響を与えた、廃止されたAPIの最適化と削除など、多くの変更も行われました。Elasticsearchモジュールは現在含まれてドキュメントを含み
Get-、Index-そしてSearch-Requests次のようなタイプを使用することを可能にする、SearchHit、SearchHitsとSearchPage。
それでは、イノベーションに移りましょう。
Kotlinコロチンをサポートするリポジトリ
Neumannリリースは、以前のMooreリリースで開始されたKotlinコロチンのサポートをリポジトリに追加することにより、引き続きサポートを構築します。 コルティンは、リアクティブなSpringDataリポジトリを通じて維持されます。これで、リアクティブクエリメソッドを使用したり、独自の一時停止関数を記述したりできます。
interface StudentRepository : CoroutineCrudRepository<Student, String> {
suspend fun findOne(id: String): User
fun findByLastname(firstname: String): Flow<Student>
}
@Primary-リポジトリと「検索」キーワード
これらの2つの小さな変更により、リポジトリBeanの取得とクエリメソッドの命名が改善されます。これ
@Primaryで、Bean構成でインターフェイスリポジトリの注釈が考慮されるようになり、コンテナが依存関係を解決するのに役立ちます。"search"同様に、クエリメソッドにプレフィックスを使用できるようになりました"find"。これで"search...By..."、メソッドを作成できるようになりましたsearchByFirstname。
これはElasticsearchのようなデータベースに対して行われました
search...By...が、次に進んで、SpringDataでR2DBCを使用する方法を見てみましょう。
R2DBCクエリの生成
これまで、Spring Data R2DBCは
@Query、インターフェイスを介して公開されるデフォルトのメソッドを除いて、クエリメソッドに注釈を使用してきました*.Repository。メソッド名によるリクエストの生成は、他のモジュールと同様に機能するようになりました。
interface StudentRepository extends ReactiveCrudRepository<Student, Long> {
Flux<Student> searchByLastname(String lastname); (1)
}
これは次と同等です。
@Query("select id, firstname, lastname from customer c where c.lastname = :lastname")
JDBCのページネーションとクエリ生成
Spring Data JDBC 2.0は、さらに多くのリレーショナルデータベースをサポートします。現在、H2、HSQLDB、MySQL、MariaDB、PostgreSQL、およびDB2で統合テストを実行しています。
これらのデータベースでは、クエリの生成とページネーションをサポートしています。例えば:
interface StudentRepository extends PagingAndSortingRepository<Student, Long> {
Page<Student> findByLastname(String lastname);
}
このリリースでは、MongoDBとドキュメントを変更する新しい方法から始めて、引き続きNoSQLに移行します。
MongoDB更新アグリゲーション
この重要な変更(Mooreリリースでは完全には準備されていませんでした)により、AggregationPipelineを使用してデータを更新できます。したがって、変更には、フィールド値の条件などの複雑な式を含めることができます。
AggregationUpdate update = Aggregation.newUpdate()
.set("average").toValue(ArithmeticOperators.valueOf("tests").avg())
.set("grade").toValue(ConditionalOperators.switchCases(
when(valueOf("average").greaterThanEqualToValue(90)).then("A"),
when(valueOf("average").greaterThanEqualToValue(80)).then("B"),
when(valueOf("average").greaterThanEqualToValue(70)).then("C"),
when(valueOf("average").greaterThanEqualToValue(60)).then("D"))
.defaultTo("F")
);
template.update(Student.class)
.apply(update)
.all();
また、Spring Data MongoDBは、他のモジュールの埋め込みオブジェクトに対する最近追加されたサポートの恩恵を受けることは間違いありません。
ApacheCassandraでの埋め込み型のサポート
Apache Cassandraは、Spring DataJDBCで長い間利用可能であった埋め込み型マッピングをサポートするようになりました。ドメインモデルでは、プロパティが単一のテーブルに格納されている値オブジェクトに組み込みオブジェクトが使用されます。次の例では、
Student.name注釈があるフィールド上記@Embeddedクラスのすべてのフィールドをさせ、Nameテーブルに格納されてStudent3つの列からなる(student_id、firstnameおよびlastname):
public class Student {
@PrimaryKey("student_id")
private String studentId;
@Embedded(onEmpty = USE_NULL)
Name name;
}
public class Name {
private String firstname;
private String lastname;
}
Elasticsearch監査
ElasticSearchでは
id、オブジェクトが新しいかどうかを判断するための十分な基準が存在しないため、実装中に次Persistableのメソッドを使用して追加情報を提供する必要がありますisNew()。
@Document(indexName = "person")
public class Person implements Persistable<Long> {
@Id private Long id;
private String lastName;
private String firstName;
@Field(type = Date)
private Instant createdDate;
private String createdBy
@Field(type = Date)
private Instant lastModifiedDate;
private String lastModifiedBy;
@Override
public boolean isNew() {
return id == null || (createdDate == null && createdBy == null);
}
}
@EnableElasticsearchAuditing構成へ
の追加により、監査に必要なすべてのコンポーネントがログに記録されます。
Neo4j
Spring Data Neo4jは、パラメーターを使用したNeo4j4.0クエリ構文をサポートするようになりました。プレースホルダー構文は以前は非推奨でしたが、現在は完全に削除されています。このモジュールは、最新のNeo4j-OGMおよびNeo4j Javaドライバーに依存して、最新のNeo4jとの相互運用性を向上させています。
グラフデータベースの反応性をサポートし、Neo4jRXを使用してSpringDataに統合する作業も活発に行われています(これは現在のリリースには含まれていませんが、次のリリースに含める準備ができています)。
Apache Geode / VMware Tanzu GemFire
ApacheGeode
spring-data-geodeおよびVMwareTanzu GemFire(およびspring-data-gemfire)のSpring Dataモジュールは、SDGというタイトルで1つのプロジェクトに統合されています。 Apache Geodeが1.12.0に更新され、GemFireが9.10.0に更新されました。これは、Apache Geode1.12に基づいています。さらに、SDGはJDKバージョン8〜14でコンパイルおよび実行されるようになりました。SDGは、GemFire / GeodeCacheからのCacheTransactionEventをコンテキスト内の適切なApplicationEventにマップする自動トランザクションイベントの公開を
サポートするようになりました。SDGで構成されたAEQでイベントの送信 を一時停止することもできるようになりました。また、SDGアノテーションを使用してGemFire / Geode Locatorベースのアプリケーションを構築する場合は、構成できます
@LocatorApplication他のロケーターに接続するためのロケーター。これにより、可用性と復元力の高いクラスターが作成されます。
コースの詳細をご覧ください。