Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk azt ismerteti, hogyan használható együtt a Spring Cloud Azure és a Spring Data.
Spring Data Azure Cosmos DB-támogatás
Azure Cosmos DB egy globálisan elosztott adatbázis-szolgáltatás, amely lehetővé teszi a fejlesztők számára, hogy különböző szabványos API-k, például az SQL, a MongoDB, a Graph és az Azure Table Storage használatával dolgozzanak az adatokkal.
Függőségek beállítása
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
</dependency>
Konfiguráció
Megjegyzés
Ha biztonsági taggal hitelesíti és engedélyezi a Microsoft Entra-azonosítót egy Azure-erőforrás eléréséhez, győződjön meg arról, hogy a biztonsági tag megfelelő engedélyt kapott az Azure-erőforrás eléréséhez. További információ: Hozzáférés engedélyezése a Microsoft Entra-azonosítóval.
Az alábbi táblázat a spring-cloud-azure-starter-data-cosmoskonfigurálható tulajdonságait sorolja fel:
| Ingatlan | Leírás |
|---|---|
spring.cloud.azure.cosmos.enabled |
Egy érték, amely jelzi, hogy az Azure Cosmos DB szolgáltatás engedélyezve van-e. Az alapértelmezett érték a true. |
spring.cloud.azure.cosmos.database |
Az Azure Cosmos DB-adatbázis azonosítója. |
spring.cloud.azure.cosmos.endpoint |
Az Azure Cosmos DB csatlakoztatásához használt URI. |
spring.cloud.azure.cosmos.key |
Az Azure Cosmos DB csatlakoztatásához használt PrivateKey. |
spring.cloud.azure.cosmos.credential.client-certificate-password |
A tanúsítványfájl jelszava. |
spring.cloud.azure.cosmos.credential.client-certificate-path |
Annak a PEM-tanúsítványfájlnak az elérési útja, amelyet az Azure-ral végzett egyszerű szolgáltatásnév-hitelesítéshez kell használni. |
spring.cloud.azure.cosmos.credential.client-id |
Az azure-ral végzett egyszerű szolgáltatáshitelesítéshez használandó ügyfél-azonosító. |
spring.cloud.azure.cosmos.credential.client-secret |
A szolgáltatásnév-hitelesítés Azure-ral történő végrehajtásakor használandó ügyfélkulcs. |
spring.cloud.azure.cosmos.credential.managed-identity-enabled |
A felügyelt identitás engedélyezése. Az alapértelmezett érték a false. |
spring.cloud.azure.cosmos.credential.password |
A felhasználónév-/jelszó-hitelesítés Azure-beli végrehajtásakor használandó jelszó. |
spring.cloud.azure.cosmos.credential.username |
A felhasználónév/jelszó azure-beli hitelesítéséhez használandó felhasználónév. |
spring.cloud.azure.cosmos.populate-query-metrics |
Egy érték, amely jelzi, hogy fel kell-e tölteni a diagnosztikai sztringeket és a lekérdezési metrikákat. Az alapértelmezett érték a false. |
spring.cloud.azure.cosmos.consistency-level |
Az Azure Cosmos DB konzisztenciaszintje. |
Főbb fogalmak
Az alábbi lista a Spring Data-támogatás fő fogalmait mutatja be:
A Spring Data
CrudRepositoryésReactiveCrudRepository, amelyek a következő alapvető CRUD-funkciókat biztosítják:- megment
- keresd az összeset
- findOne azonosító alapján
- összes törlése
- törlés azonosító szerint
- entitás törlése
A Spring Data @Id széljegyzet. Egy domainosztály mezőjét kétféleképpen képezheti le egy Azure Cosmos DB-dokumentum
idelemére:- Mező jegyzetelése a tartományosztályban
@Id. Ez a mező az Azure Cosmos DB-ben találhatóiddokumentumhoz lesz leképezve. - Állítsa a mező nevét erre:
id. Ez a mező az Azure Cosmos DB-ben a(z)iddokumentumhoz lesz leképezve.
Megjegyzés
Ha mindkét módszert alkalmazza, a
@Idjegyzet nagyobb prioritással rendelkezik.- Mező jegyzetelése a tartományosztályban
Egyéni gyűjteménynevek. Alapértelmezés szerint a gyűjtemény neve a felhasználói tartományosztály osztályneve lesz. A testreszabáshoz csak adja hozzá a(z)
@Document(collection="myCustomCollectionName")annotációt a domainosztályhoz, és ennyi.Támogatja az Azure Cosmos DB-partíciót. Ha a tartományosztály egyik mezőjét partíciókulcs-mezőként szeretné megadni, fűzze hozzá
@PartitionKey. CRUD-műveletek végrehajtásakor adja meg a partíció értékét. További példa: AddressRepositoryIT.java a GitHubon.Támogatja Spring Data egyéni lekérdezési keresési műveletet.
Támogatja
spring-boot-starter-data-rest.Támogatja a tartományosztályok lista- és beágyazott típusait.
Alapszintű használat
Privát kulcs használata az Azure Cosmos DB eléréséhez
Az Azure Cosmos DB és a spring-cloud-azure-starter-data-cosmos összekapcsolásának legegyszerűbb módja egy elsődleges kulccsal. Adja hozzá a következő tulajdonságokat:
spring:
cloud:
azure:
cosmos:
key: ${AZURE_COSMOS_KEY}
endpoint: ${AZURE_COSMOS_ENDPOINT}
database: ${AZURE_COSMOS_DATABASE}
Entitás definiálása
Definiáljon egy entitást dokumentumként az Azure Cosmos DB-ben az alábbi példában látható módon:
@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);
}
}
A id mező a dokumentum id-jeként lesz használva az Azure Cosmos DB-ben. Másik lehetőségként bármely mezőt annotálhat a(z) @Id használatával, hogy azt a(z) id dokumentumhoz rendelje.
A jegyzet @Container(containerName = "mycollection") a dokumentum gyűjteménynevének megadására szolgál az Azure Cosmos DB-ben.
Adattárak létrehozása
Adattárak létrehozásához bővítse ki a ReactiveCosmosRepository felületet, amely támogatja a Spring Data-adattárat.
@Repository
public interface UserRepository extends ReactiveCosmosRepository<User, String> {
Flux<User> findByFirstName(String firstName);
}
A ReactiveCosmosRepository felület jelenleg alapszintű mentési, törlési és keresési műveleteket biztosít. Később további műveletek is támogatottak lesznek.
Alkalmazásosztály létrehozása
Az alábbi példa egy alkalmazásosztályt hoz létre az összes összetevővel:
@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();
}
}
Ez a példa egy automatikusan injektált UserRepository interfészt tartalmaz a mentési, törlési és keresési műveletek támogatására.
Minták
Tekintse meg a azure-spring-boot-samples GitHubon.
A spring-cloud-azure-starter-data-cosmos könyvtár használata mellett közvetlenül is használhatja azure-spring-data-cosmos kódtárat az összetettebb helyzetekhez. További információkért lásd: Spring Data for Azure Cosmos DB ügyfélkódtára.