Bevezetés a Spring Data Azure Cosmos DB-be

1. Áttekintés

Ebben az oktatóanyagban megismerhetjük az Azure Cosmos DB-t és azt, hogy miként léphetünk kapcsolatba vele a Spring Data segítségével.

2. Azure Cosmos DB

Az Azure Cosmos DB a Microsoft globálisan elosztott adatbázis-szolgáltatása.

Ez egy NoSQL adatbázis, amely átfogó szolgáltatási szintű megállapodásokat biztosít az átviteli sebességre, a késleltetés, az elérhetőség és a következetesség garanciáira. Emellett 99,999% -os rendelkezésre állást biztosít mind az olvasás, mind az írás számára.

Az Azure Cosmos DB csak két konzisztencia-választást ad meg, azaz konzisztens vagy nem konzisztens. Helyette, öt konzisztencia-választást kapunk: erős, határolt hajlékonyság, ülés, következetes előtag, és végső.

Rugalmasan tudjuk méretezni az Azure Cosmos DB átviteli sebességét és tárolását is.

Ezenkívül elérhető az összes Azure-régióban, és kulcsrakész globális terjesztést kínál, mivel egyetlen gombnyomásra kattintva megismételhetjük adatainkat bármely Azure-régióban. Ez segít abban, hogy adataink közelebb legyenek felhasználóinkhoz, hogy gyorsabban tudjuk kiszolgálni kéréseiket.

Séma-agnosztikusmivel nincs sémája. Ezenkívül nem kell indexkezelést végrehajtanunk az Azure Cosmos Db esetén. Automatikusan indexeli az adatokat számunkra.

Dolgozhatunk az Azure CosmosDb-vel különböző szabványos API-k használatával, például SQL, MongoDB, Cassandra stb.

3. Spring Data Azure Cosmos DB

A Microsoft egy olyan modult is biztosít, amely lehetővé teszi számunkra, hogy a Spring Data segítségével dolgozzunk a Cosmos DB-vel. A következő szakaszban megnézzük, hogyan használhatjuk az Azure Cosmos DB-t egy Spring Boot alkalmazásban.

Példánkban létrehozunk egy tavaszi webalkalmazást, amely egy termék entitást tárol egy Azure Cosmos adatbázisban, és alapvető CRUD műveleteket hajt végre rajta. Először is konfigurálnunk kell egy fiókot és adatbázist az Azure portálon, a dokumentáció utasításainak betartásával.

Ha nem akarunk fiókot létrehozni az Azure portálon, akkor az Azure biztosítja az Azure Cosmos emulátort is. Annak ellenére, hogy ez nem tartalmazza az Azure Cosmos Service összes funkcióját, és vannak bizonyos különbségek, használhatjuk helyi fejlesztésre és tesztelésre.

Az emulátort helyi környezetünkben kétféleképpen használhatjuk: vagy az Azure Cosmos Emulator letöltésével a gépünkre, vagy az Emulator futtatásával a Docker for Windows rendszeren.

Kiválasztjuk a Docker futtatásának lehetőségét Windows-hoz. Húzzuk meg a Docker képet a következő parancs futtatásával:

docker pull microsoft / azure-cosmosdb-emulator

Ezután futtathatjuk a Docker képet, és a következő parancsok futtatásával elindíthatjuk a tárolót:

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%, destination = C: \ CosmosDB.Emulator \ bind-mount "-P --interactive --tty microsoft / azure-cosmosdb-emulator

Miután konfiguráltuk az Azure Cosmos DB-fiókot és adatbázist az Azure portálon vagy a Dockerben, folytathatjuk a konfigurálást a Spring Boot alkalmazásban.

4. Az Azure Cosmos DB használata tavasszal

4.1. A Spring Data Azure Cosmos DB beállítása a tavasszal

Kezdjük azzal, hogy hozzáadjuk a spring-data-cosmosdb függőséget pom.xml:

 com.microsoft.azure spring-data-cosmosdb 2.3.0 

Az Azure Cosmos DB tavaszi alkalmazásunkból való eléréséhez szükségünk lesz az adatbázisunk URI-jára, ez a hozzáférési kulcsok és az adatbázis neve. Ezután hozzáadjuk a kapcsolat tulajdonságait alkalmazás.tulajdonságok:

azure.cosmosdb.uri = cosmodb-uri azure.cosmosdb.key = cosmodb-elsődleges kulcs azure.cosmosdb.secondaryKey = cosmodb-másodlagos kulcs azure.cosmosdb.database = cosmodb-név 

Megtalálhatjuk a fenti tulajdonságok értékeit az Azure portálról. Az URI, az elsődleges kulcs és a másodlagos kulcs elérhető lesz az Azure Cosmos DB kulcsrészében az Azure portálon.

Az Azure Cosmos DB-hez való csatlakozáshoz az alkalmazásunkból klienst kell létrehoznunk. Azért, ki kell terjesztenünk AbstractCosmosConfiguration osztály a konfigurációs osztályunkban, és adja hozzá a @EnableCosmosRepositories annotáció.

Ez a kommentár olyan interfészeket keres, amelyek kibővítik a Spring Data adattár interfészeit a megadott csomagban.

Nekünk is kell konfiguráljon egy típusú babot CosmosDBConfig:

@Configuration @EnableCosmosRepositories (basePackages = "com.baeldung.spring.data.cosmosdb.repository") nyilvános osztály AzureCosmosDbConfiguration kiterjeszti az AbstractCosmosConfiguration {@Value ("$ {azure.cosmosdb.uri}") privát karakterláncot @Value ("$ {azure.cosmosdb.key}") privát karakterlánc-kulcs; @Value ("$ {azure.cosmosdb.database}") privát karakterlánc dbName; privát CosmosKeyCredential cosmosKeyCredential; @Bean public CosmosDBConfig getConfig () {this.cosmosKeyCredential = új CosmosKeyCredential (kulcs); CosmosDBConfig cosmosdbConfig = CosmosDBConfig.builder (uri, this.cosmosKeyCredential, dbName) .build (); return cosmosdbConfig; }}

4.2. Entitás létrehozása az Azure Cosmos DB számára

Az Azure Cosmos DB-vel való interakció érdekében entitásokat használunk. Tehát hozzunk létre egy entitást, amelyet az Azure Cosmos DB-ben tárolunk. Hogy a mi Termék osztályozzon egy entitást, használjuk a @Dokumentum kommentár:

@Document (collection = "products") public class Product {@Id private String productid; privát String termékNév; magán dupla ár; @PartitionKey privát karakterlánc termékKategória; }

Ebben a példában használtuk a Gyűjtemény attribútum az értékkel Termékek, ennek jelzésére a tárolónk neve lesz az adatbázisban. Ha nem adunk meg értéket a Gyűjtemény paraméter, akkor az osztály neve lesz a tároló neve az adatbázisban.

Meghatároztuk a dokumentumunk azonosítóját is. Vagy létrehozhatunk egy mezőt a névvel id osztályunkban, vagy egy mezőt feljegyezhetünk a @Id annotáció. Itt használtuk a termék azonosító mező, mint a dokumentum azonosítója.

Logikailag particionálhatjuk adatainkat a tárolónkban egy partíciókulcs használatával, egy mezővel annotálva @PartitionKey. Osztályunkban a Termékkategória mező partíciós kulcsként.

Alapértelmezés szerint az indexelési házirendet az Azure határozza meg, de a használatával testreszabhatjuk is @DocumentIndexingPolicy feljegyzés az entitásosztályunkon.

Az optimista zárolást engedélyezhetjük entitás-tárolónk számára is egy nevű mező létrehozásával _etag és azzal annotálva @Változat.

4.3. A tárház meghatározása

Most hozzunk létre egy ProductRepository kiterjedő interfész CosmosRepository. Ezen a felületen CRUD műveleteket hajthatunk végre az Azure Cosmos DB-n:

@Repository nyilvános felület A ProductRepository kiterjeszti a CosmosRepository {List findByProductName (String termékNév); }

Mint láthatjuk, ezt a többi Spring Data modulhoz hasonlóan definiálják.

4.4. A kapcsolat tesztelése

Most létrehozhatunk egy Junit tesztet a Termék entitás az Azure Cosmos DB használatával ProductRepository:

@SpringBootTest nyilvános osztály AzureCosmosDbApplicationManualTest {@Autowired ProductRepository productRepository; @Test public void givenProductIsCreated_whenCallFindById_thenProductIsFound () {Product product = new Product (); product.setProductid ("1001"); product.setProductCategory ("Ing"); product.setPrice (110,0); product.setProductName ("kék ing"); productRepository.save (termék); Termék retrievedProduct = productRepository.findById ("1001", új PartitionKey ("Ing")) .orElse (null); Assert.notNull (retrievedProduct, "A visszakeresett termék semmis"); }}

A Junit teszt futtatásával tesztelhetjük a kapcsolatot az Azure Cosmos DB-vel a tavaszi alkalmazásunkból.

5. Következtetés

Ebben az oktatóanyagban megismerhettük az Azure Cosmos DB-t. Továbbá megtanultuk, hogyan férhet hozzá az Azure Cosmos DB-hez egy Spring Boot alkalmazásból, hogyan hozhat létre entitásokat és konfigurálhat egy adattárat kibővítve CosmosRepository hogy kölcsönhatásba lépjen vele.

A fenti példa kódja elérhető a GitHubon.