Uvod u Spring Data Azure Cosmos DB

1. Pregled

U ovom uputstvu naučit ćemo o Azure Cosmos DB i kako možemo s njim komunicirati koristeći Spring Data.

2. Azure Cosmos DB

Azure Cosmos DB je Microsoftova globalno distribuirana usluga baza podataka.

To je baza podataka NoSQL, koji pruža sveobuhvatne ugovore o razini usluge za jamstva protoka, kašnjenja, dostupnosti i dosljednosti. Također, osigurava 99,999% dostupnosti za čitanje i pisanje.

Azure Cosmos DB ne daje samo dva izbora dosljednosti, tj. Dosljedan ili neskladan. Umjesto toga, dobivamo pet izbora dosljednosti: jaka, ograničena ustajalost, sjednica, dosljedni prefiks, i eventualni.

Možemo elastično prilagoditi protok i pohranu Azure Cosmos DB-a.

Osim toga, dostupan je u svim Azure regijama i nudi globalnu distribuciju po sistemu „ključ u ruke“, jer možemo kopirati svoje podatke u bilo kojoj Azure regiji samo klikom na gumb. To nam pomaže u približavanju naših podataka našim korisnicima kako bismo mogli brže uslužiti njihove zahtjeve.

Shema je agnostičkajer nema shemu. Nadalje, ne trebamo upravljati indeksima za Azure Cosmos Db. Automatski vrši indeksiranje podataka za nas.

Možemo raditi s Azure CosmosDb koristeći različite standardne API-je poput SQL-a, MongoDB-a, Cassandre itd.

3. Proljetni podaci Azure Cosmos DB

Microsoft također nudi modul koji nam omogućuje rad s Cosmos DB koristeći Spring Data. U sljedećem odjeljku vidjet ćemo kako možemo koristiti Azure Cosmos DB u aplikaciji Spring Boot.

U našem ćemo primjeru izraditi web aplikaciju Spring koja pohranjuje entitet proizvoda u bazu podataka Azure Cosmos i na njemu izvodi osnovne CRUD operacije. Prvo moramo konfigurirati račun i bazu podataka na Azure portalu, slijedeći upute u dokumentaciji.

Ako ne želimo stvoriti račun na Azure portalu, Azure također nudi Azure Cosmos Emulator. Iako ovo ne sadrži sve funkcionalnosti usluge Azure Cosmos i postoje neke razlike, možemo ga koristiti za lokalni razvoj i testiranje.

Emulator u našem lokalnom okruženju možemo koristiti na dva načina: preuzimanjem Azure Cosmos Emulatora na naš stroj ili pokretanjem emulatora na Dockeru za Windows.

Odabrat ćemo opciju za pokretanje na Dockeru za Windows. Povucimo Dockerovu sliku izvođenjem sljedeće naredbe:

docker pull microsoft / azure-cosmosdb-emulator

Tada možemo pokrenuti Dockerovu sliku i pokrenuti spremnik pokretanjem sljedećih naredbi:

set containerName = azure-cosmosdb-emulator set hostDirectory =% LOCALAPPDATA% \ azure-cosmosdb-emulator.hostd md% hostDirectory% 2> nul docker run --name% containerName% --memory 2GB --mount "type = bind, source =% hostDirectory%, odredište = C: \ CosmosDB.Emulator \ bind-mount "-P --interactive --tty microsoft / azure-cosmosdb-emulator

Nakon što smo konfigurirali Azure Cosmos DB račun i bazu podataka na Azure portalu ili u Dockeru, možemo ih nastaviti konfigurirati u našoj aplikaciji Spring Boot.

4. Korištenje Azure Cosmos DB u proljeće

4.1. Konfiguriranje Spring Data Azure Cosmos DB s Springom

Počinjemo dodavanjem ovisnosti spring-data-cosmosdb u našu pom.xml:

 com.microsoft.azure spring-data-cosmosdb 2.3.0 

Za pristup Azure Cosmos DB iz naše proljetne aplikacije trebat će nam URI naše baze podataka, to su pristupni ključevi i naziv baze podataka. Tada ćemo dodati svojstva veze u naš primjena.svojstva:

azure.cosmosdb.uri = cosmodb-uri azure.cosmosdb.key = cosmodb-primarni ključ azure.cosmosdb.secondaryKey = cosmodb-sekundarni ključ azure.cosmosdb.database = cosmodb-name 

Vrijednosti gornjih svojstava možemo pronaći na portalu Azure. URI, primarni ključ i sekundarni ključ bit će dostupni u odjeljku ključeva našeg Azure Cosmos DB-a na Azure portalu.

Da bismo se povezali s Azure Cosmos DB iz naše aplikacije, moramo stvoriti klijenta. Za to, moramo produžiti AbstractCosmosConfiguration klase u našoj klasi konfiguracije i dodajte @EnableCosmosRepositories bilješka.

Ova će napomena tražiti sučelja koja proširuju sučelja spremišta Spring Data u navedenom paketu.

Mi također trebamo konfigurirati grah tipa CosmosDBConfig:

@Configuration @EnableCosmosRepositories (basePackages = "com.baeldung.spring.data.cosmosdb.repository") javna klasa AzureCosmosDbConfiguration proširuje AbstractCosmosConfiguration {@Value ("$ {azure.cosmosdb.uri}") private String uri; @Value ("$ {azure.cosmosdb.key}") privatni ključ niza; @Value ("$ {azure.cosmosdb.database}") private String dbName; privatno CosmosKeyCredential cosmosKeyCredential; @Bean public CosmosDBConfig getConfig () {this.cosmosKeyCredential = novi CosmosKeyCredential (ključ); CosmosDBConfig cosmosdbConfig = CosmosDBConfig.builder (uri, this.cosmosKeyCredential, dbName) .build (); povratak cosmosdbConfig; }}

4.2. Stvaranje entiteta za Azure Cosmos DB

Da bismo komunicirali s Azure Cosmos DB, koristimo entitete. Dakle, kreirajmo entitet koji ćemo pohraniti u Azure Cosmos DB. Da bi naš Proizvod klasificirati entitet, koristit ćemo @Dokument napomena:

@Document (collection = "products") proizvod javne klase {@Id private String productid; private String productName; privatna dvostruka cijena; @PartitionKey private String productCategory; }

U ovom primjeru, koristili smo kolekcija atribut s vrijednošću proizvoda, što znači da će to biti ime našeg spremnika u bazi podataka. Ako ne pružimo nikakvu vrijednost za kolekcija parametar, tada će se ime klase koristiti kao ime spremnika u bazi podataka.

Također smo definirali ID za naš dokument. Možemo ili stvoriti polje s imenom iskaznica u našoj klasi ili možemo polje označiti znakom @Iskaznica bilješka. Ovdje smo koristili Identifikacijski broj proizvoda polje kao id dokumenta.

Svoje podatke u našem spremniku možemo logički particionirati pomoću particijskog ključa označavanjem polja s @PartitionKey. U našem razredu koristili smo kategorija proizvoda polje kao particijski ključ.

Prema zadanim postavkama politiku indeksiranja definira Azure, ali ga također možemo prilagoditi pomoću @DocumentIndexingPolicy napomena na našem entitetu Class.

Možemo također omogućiti optimistično zaključavanje za naš spremnik entiteta stvaranjem polja s imenom _etag i bilježeći ga s @Verzija.

4.3. Definiranje spremišta

Sada stvorimo a Spremište proizvoda sučelje koje se proteže CosmosRepository. Korištenjem ovog sučelja možemo izvoditi CRUD operacije na našem Azure Cosmos DB-u:

@Repository javno sučelje ProductRepository proširuje CosmosRepository {Popis findByProductName (Niz proizvodaName); }

Kao što vidimo, ovo se definira na sličan način kao i drugi moduli Spring Data.

4.4. Testiranje veze

Sada možemo stvoriti Junit test za spremanje a Proizvod entitet u Azure Cosmos DB koristeći naš Spremište proizvoda:

@SpringBootTest javna klasa AzureCosmosDbApplicationManualTest {@Autowired ProductRepository productRepository; @Test javna praznina givenProductIsCreated_whenCallFindById_thenProductIsFound () {Product product = new Product (); product.setProductid ("1001"); product.setProductCategory ("Košulja"); product.setPrice (110,0); product.setProductName ("Plava košulja"); productRepository.save (proizvod); Proizvod retrievedProduct = productRepository.findById ("1001", novi PartitionKey ("Košulja")) .orElse (null); Assert.notNull (retrievedProduct, "Dohvaćeni proizvod je null"); }}

Izvođenjem ovog Junit testa možemo testirati našu vezu s Azure Cosmos DB iz naše proljetne aplikacije.

5. Zaključak

U ovom uputstvu saznali smo o Azure Cosmos DB. Nadalje, naučili smo kako pristupiti Azure Cosmos DB iz aplikacije Spring Boot, kako stvoriti entitete i konfigurirati spremište proširujući CosmosRepository za interakciju s njom.

Kôd za gornji primjer dostupan je na GitHub-u.