Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan bagaimana Spring Cloud Azure dan Spring Data dapat digunakan bersama-sama.
Dukungan Spring Data Azure Cosmos DB
Azure Cosmos DB adalah layanan database terdistribusi secara global yang memungkinkan pengembang untuk bekerja dengan data menggunakan berbagai API standar, seperti SQL, MongoDB, Graph, dan penyimpanan Azure Table.
Penyiapan dependensi
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
</dependency>
Konfigurasi
Nota
Jika Anda menggunakan prinsip keamanan untuk mengautentikasi dan mengotorisasi dengan ID Microsoft Entra untuk mengakses sumber daya Azure, pastikan prinsip keamanan telah diberikan izin yang memadai untuk mengakses sumber daya Azure. Untuk informasi selengkapnya, lihat Mengotorisasi akses dengan ID Microsoft Entra.
Tabel berikut mencantumkan properti spring-cloud-azure-starter-data-cosmosyang dapat dikonfigurasi :
Konsep utama
Daftar berikut menunjukkan konsep utama dukungan Spring Data:
Spring Data
CrudRepositorydanReactiveCrudRepository, yang menyediakan fungsionalitas CRUD dasar berikut:- simpan
- temukanSemua
- findOne berdasarkan ID
- hapusSemua
- hapus menurut ID
- hapus entitas
Anotasi @Id Spring Data. Ada dua cara untuk memetakan bidang di kelas domain ke
iddokumen Azure Cosmos DB:- Buat anotasi bidang di kelas domain dengan
@Id. Bidang ini akan dipetakan keiddokumen di Azure Cosmos DB. - Atur nama bidang ini ke
id. Bidang ini akan dipetakan keiddokumen di Azure Cosmos DB.
Nota
Jika kedua cara diterapkan, anotasi
@Idmemiliki prioritas yang lebih tinggi.- Buat anotasi bidang di kelas domain dengan
Nama koleksi kustom. Secara default, nama koleksi akan menjadi nama kelas kelas domain pengguna. Untuk menyesuaikannya, tambahkan anotasi
@Document(collection="myCustomCollectionName")ke kelas domain Anda, itu saja.Mendukungpartisi Azure Cosmos DB
. Untuk menentukan bidang kelas domain Anda menjadi bidang kunci partisi, anotasi dengan @PartitionKey. Saat Anda melakukan operasi CRUD, tentukan nilai partisi Anda. Untuk contoh selengkapnya, lihat AddressRepositoryIT.java di GitHub.Mendukung kueri kustom Spring Data menemukan operasi.
Mendukung
spring-boot-starter-data-rest.Mendukung Daftar dan jenis berlapis di kelas domain.
Penggunaan dasar
Menggunakan kunci privat untuk mengakses Azure Cosmos DB
Cara paling sederhana untuk menghubungkan Azure Cosmos DB dengan spring-cloud-azure-starter-data-cosmos adalah dengan kunci primer. Tambahkan properti berikut:
spring:
cloud:
azure:
cosmos:
key: ${AZURE_COSMOS_KEY}
endpoint: ${AZURE_COSMOS_ENDPOINT}
database: ${AZURE_COSMOS_DATABASE}
Menentukan entitas
Tentukan entitas sebagai Dokumen di Azure Cosmos DB, seperti yang ditunjukkan dalam contoh berikut:
@Container(containerName = "mycollection")
public class User {
@Id
private String id;
private String firstName;
@PartitionKey
private String lastName;
private String address;
public User() {
}
public User(String id, String firstName, String lastName, String address) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return String.format("%s %s, %s", firstName, lastName, address);
}
}
Bidang id akan digunakan sebagai id dokumen di Azure Cosmos DB. Secara bergantian, Anda dapat membuat anotasi bidang apa pun dengan @Id untuk memetakannya ke dokumen id.
Anotasi @Container(containerName = "mycollection") digunakan untuk menentukan nama koleksi dokumen Anda di Azure Cosmos DB.
Membuat repositori
Untuk membuat repositori, perluas antarmuka ReactiveCosmosRepository, yang menyediakan dukungan repositori Spring Data.
@Repository
public interface UserRepository extends ReactiveCosmosRepository<User, String> {
Flux<User> findByFirstName(String firstName);
}
Saat ini, antarmuka ReactiveCosmosRepository menyediakan operasi simpan, hapus, dan temukan dasar. Lebih banyak operasi akan didukung nanti.
Membuat kelas aplikasi
Contoh berikut membuat kelas aplikasi dengan semua komponen:
@SpringBootApplication
public class CosmosSampleApplication implements CommandLineRunner {
private static final Logger LOGGER = LoggerFactory.getLogger(CosmosSampleApplication.class);
@Autowired
private UserRepository repository;
@Autowired
private CosmosProperties properties;
public static void main(String[] args) {
SpringApplication.run(CosmosSampleApplication.class, args);
}
public void run(String... var1) {
final User testUser = new User("testId", "testFirstName",
"testLastName", "test address line one");
// Save the User class to Azure Cosmos DB database.
final Mono<User> saveUserMono = repository.save(testUser);
final Flux<User> firstNameUserFlux = repository.findByFirstName("testFirstName");
// Nothing happens until we subscribe to these Monos.
// findById won't return the user as user isn't present.
final Mono<User> findByIdMono = repository.findById(testUser.getId());
final User findByIdUser = findByIdMono.block();
Assert.isNull(findByIdUser, "User must be null");
final User savedUser = saveUserMono.block();
Assert.state(savedUser != null, "Saved user must not be null");
Assert.state(savedUser.getFirstName().equals(testUser.getFirstName()),
"Saved user first name doesn't match");
firstNameUserFlux.collectList().block();
final Optional<User> optionalUserResult = repository.findById(testUser.getId()).blockOptional();
Assert.isTrue(optionalUserResult.isPresent(), "Cannot find user.");
final User result = optionalUserResult.get();
Assert.state(result.getFirstName().equals(testUser.getFirstName()),
"query result firstName doesn't match!");
Assert.state(result.getLastName().equals(testUser.getLastName()),
"query result lastName doesn't match!");
LOGGER.info("findOne in User collection get result: {}", result.toString());
}
@PostConstruct
public void setup() {
// For this example, remove all of the existing records.
this.repository.deleteAll().block();
}
}
Contoh ini mencakup antarmuka UserRepository otomatis untuk mendukung operasi simpan, hapus, dan temukan.
Sampel
Lihat di azure-spring-boot-samples GitHub.
Selain menggunakan pustaka spring-cloud-azure-starter-data-cosmos, Anda dapat langsung menggunakan pustaka azure-spring-data-cosmos untuk skenario yang lebih kompleks. Untuk informasi selengkapnya, lihat Spring Data untuk pustaka klien Azure Cosmos DB.