Anda dapat mempelajari lebih lanjut tentang kursus ini dengan melihat catatan hari buka .
Spring Data Neumann adalah rilis pertama sejak transisi ke siklus rilis enam bulan yang baru. Mengurangi waktu antara rilis akan memungkinkan kami merilis fitur baru lebih sering, dan ini, pada gilirannya, akan mempercepat Anda juga. Dalam rilis ini, selain fungsionalitas baru, ada juga perubahan penting yang berpotensi merusak kompatibilitas dengan versi sebelumnya.
Mengubah versi utama
Untuk proyek yang tercantum di bawah ini, nomor versi utama telah ditingkatkan karena perubahan yang merusak kompatibilitas dalam API atau driver publik:
- Spring Data JDBC 2.0 (versi sebelumnya 1.1)
- Migrasi dari 1.1 ke 2.0 dijelaskan dalam posting ini .
- Spring Data MongoDB 3.0 (versi sebelumnya 2.2)
- Spring Data for Apache Cassandra 3.0 (versi sebelumnya 2.2)
- Spring Data Couchbase 4.0 (versi sebelumnya 3.2)
- Spring Data Elasticsearch 4.0 (versi sebelumnya 3.2)
- Untuk detail lebih lanjut tentang perubahan, lihat posting ini .
Sebelum melanjutkan ke menjelaskan fungsionalitas baru, mari kita lihat perubahan di API. Untuk detail selengkapnya, lihat bagian Peningkatan dalam dokumentasi untuk masing-masing modul.
Jika Anda belum siap untuk memperbarui sekarang, perlu diingat bahwa rilis Moore sebelumnya akan didukung selama dua belas bulan lagi.
JDBC
Setiap penyimpanan SQL memiliki karakteristiknya sendiri yang memerlukan pendekatan khusus. Untuk meningkatkan dukungan mereka, perubahan dilakukan yang mempengaruhi peningkatan versi utama. Sekarang,
AbstractJdbcConfigurationsecara default, mencoba mengidentifikasi Dialectdatabase dari yang diberikan DataSourceatau didaftarkan DialectResolver. Secara default, modul JDBC dilengkapi dengan dialek untuk H2, HSQLDB, MySQL, Postgres, MariaDB, Microsoft SqlServer, dan DB2. Spring Data JDBC sekarang mengesampingkan semua nama tabel dan kolom secara default. Meskipun ini dapat menyebabkan Anda mengubah milik CREATE TABLEatau anotasi Anda @Column, ini akan memberi Anda lebih banyak fleksibilitas dalam menamai objek.
MongoDB
Jar tunggal dengan driver untuk MongoDB (mongo-java-driver) dibagi menjadi beberapa: -sync dan -reactivestreams, yang memungkinkan Anda untuk memilih hanya driver yang Anda butuhkan. Artinya, driver MongoDB sinkron dan reaktif sekarang menjadi dependensi opsional yang harus ditambahkan secara manual. Dengan migrasi ke driver baru, beberapa API yang sudah tidak digunakan lagi dihapus secara permanen, memengaruhi kelas konfigurasi seperti
AbstractMongoConfigurationnamespace XML yang disediakan oleh Spring Data. Untuk detailnya, lihat bagian pemutakhiran dalam dokumentasi.
Apache Cassandra
Pembaruan driver Apache Cassandra yang sudah lama tertunda menjadi 4.0 tidak hanya memperbarui paket dan struktur data, tetapi juga mengubah perilaku di cluster dan dalam penanganan sesi. Hal ini mengakibatkan perubahan konfigurasi utama yang mempengaruhi konfigurasi XML dan dapat mempengaruhi konfigurasi dalam kode untuk beberapa skenario yang kompleks (lebih sulit daripada pengaturan default sederhana
AbstractCassandraConfiguration).
Couchbase
Mengikuti Couchbase SDK, kami telah meningkatkan dari 3.x menjadi 4.x, yang menambahkan manajemen indeks otomatis dan dukungan transaksi. Baca lebih lanjut di blog Couchbase .
Elasticsearch
Menambahkan dukungan untuk HTTP Client API, SSL, dan Proxy. Sejumlah perubahan juga dilakukan, termasuk pengoptimalan dan penghapusan API yang tidak digunakan lagi, yang memengaruhi perubahan nomor versi utama. Modul Elasticsearch sekarang menyertakan Dokumen, yang mencakup
Get-, Index-dan Search-Requests, yang memungkinkan Anda menggunakan tipe seperti SearchHit, SearchHitsdan saat memetakan SearchPage.
Sekarang mari beralih ke inovasi.
Repositori dengan dukungan untuk coroutine Kotlin
Rilis Neumann terus membangun dukungan untuk coroutine Kotlin yang dimulai pada rilis Moore sebelumnya dengan menambahkan dukungan untuknya di repositori.
Coroutine dipertahankan melalui repositori Data Musim Semi yang reaktif. Sekarang Anda dapat menggunakan metode kueri reaktif atau menulis fungsi Anda sendiri yang ditangguhkan.
interface StudentRepository : CoroutineCrudRepository<Student, String> {
suspend fun findOne(id: String): User
fun findByLastname(firstname: String): Flow<Student>
}
@Primary-repositori dan kata kunci "pencarian"
Kedua perubahan kecil ini meningkatkan pengambilan kacang repositori dan metode kueri penamaan. Sekarang anotasi
@Primarypada repositori antarmuka diperhitungkan dalam konfigurasi kacang, yang membantu wadah menyelesaikan ketergantungan. Anda sekarang dapat menggunakan awalan untuk metode kueri "search", serupa "find". Sekarang dimungkinkan untuk menulis metode "search...By...", misalnya searchByFirstname.
Meskipun ini dilakukan untuk database seperti Elasticsearch, mari kita lanjutkan dan lihat bagaimana
search...By...Anda dapat menggunakan R2DBC di Spring Data.
Menghasilkan Kueri R2DBC
Hingga saat ini, Spring Data R2DBC telah menggunakan anotasi
@Queryuntuk metode kueri , kecuali untuk metode default yang diekspos melalui antarmuka *.Repository. Sekarang menghasilkan permintaan dengan nama metode berfungsi mirip dengan modul lain:
interface StudentRepository extends ReactiveCrudRepository<Student, Long> {
Flux<Student> searchByLastname(String lastname); (1)
}
Ini sama dengan:
@Query("select id, firstname, lastname from customer c where c.lastname = :lastname")
Pagination dan Query Generation untuk JDBC
Spring Data JDBC 2.0 mendukung lebih banyak database relasional. Kami sekarang menjalankan tes integrasi kami pada H2, HSQLDB, MySQL, MariaDB, PostgreSQL dan DB2.
Untuk database ini, kami mendukung pembuatan kueri dan penomoran halaman. Misalnya:
interface StudentRepository extends PagingAndSortingRepository<Student, Long> {
Page<Student> findByLastname(String lastname);
}
Dalam rilis ini, kami juga terus bergerak menuju NoSQL, dimulai dengan MongoDB dan cara baru untuk memodifikasi dokumen.
Agregasi Pembaruan MongoDB
Perubahan penting ini (yang tidak sepenuhnya disiapkan dalam rilis Moore) memungkinkan Pipa Agregasi digunakan untuk memperbarui data. Dengan demikian, perubahan dapat berisi ekspresi kompleks seperti kondisi pada nilai bidang, misalnya:
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();
Selain itu, Spring Data MongoDB tidak diragukan lagi akan mendapatkan keuntungan dari dukungan yang baru-baru ini ditambahkan untuk objek yang disematkan di modul lain.
Dukungan untuk tipe tertanam di Apache Cassandra
Apache Cassandra sekarang mendukung pemetaan tipe tertanam, yang telah lama tersedia di Spring Data JDBC . Dalam model domain, objek bawaan digunakan untuk Objek Nilai yang propertinya disimpan dalam satu tabel. Dalam contoh berikut,
Student.nameada anotasi di atas bidang @Embedded, yang menyebabkan semua bidang kelas Namedisimpan dalam tabel yang Studentterdiri dari tiga kolom ( student_id, firstnamedan 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;
}
Audit Elasticsearch
Karena keberadaan ElasticSearch
idbukanlah kriteria yang cukup untuk menentukan apakah suatu objek baru, maka perlu untuk Persistablememberikan informasi tambahan selama implementasi menggunakan metode 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);
}
}
Penambahan
@EnableElasticsearchAuditingkonfigurasi kemudian mencatat semua komponen yang diperlukan untuk audit.
Neo4j
Spring Data Neo4j sekarang mendukung sintaks kueri Neo4j 4.0 dengan parameter. Sintaks placeholder sebelumnya tidak digunakan lagi dan sekarang telah dihapus sepenuhnya. Modul ini sekarang mengandalkan driver Neo4j-OGM dan Neo4j Java terbaru untuk meningkatkan interoperabilitas dengan Neo4j terbaru.
Ada juga pekerjaan aktif pada dukungan untuk reaktivitas untuk database grafik dan integrasinya ke Spring Data dengan Neo4j RX (meskipun ini tidak termasuk dalam rilis saat ini, tetapi sudah siap untuk dimasukkan di rilis berikutnya).
Apache Geode / VMware Tanzu GemFire
Modul Spring Data untuk Apache Geode dan VMware Tanzu GemFire ββ(
spring-data-geodedan spring-data-gemfire) digabungkan menjadi satu proyek dengan judul SDG. Apache Geode telah diperbarui menjadi 1.12.0 dan GemFire ββmenjadi 9.10.0, yang pada gilirannya didasarkan pada Apache Geode 1.12. Selain itu, SDG mengkompilasi dan berjalan pada JDK versi 8 hingga 14.
SDG sekarang mendukung penerbitan peristiwa transaksi otomatis, yang memetakan Cache TransactionEvent dari GemFire ββ/ Geode Cache ke ApplicationEvent yang sesuai dalam konteksnya.
Sekarang juga dimungkinkan untuk menjeda pengiriman peristiwa pada AEQ yang dikonfigurasi dengan SDG. Selain itu, saat membangun aplikasi berbasis GemFire ββ/ Geode Locator menggunakan anotasi SDG,
@LocatorApplicationAnda dapat menyesuaikanLocator untuk terhubung ke Locator lain , sehingga menciptakan cluster yang sangat tersedia dan tangguh.
Pelajari lebih lanjut tentang kursus tersebut.