Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe Spring Cloud Azure en Spring Data samen kunnen worden gebruikt.
Ondersteuning voor Spring Data Azure Cosmos DB
Azure Cosmos DB is een wereldwijd gedistribueerde databaseservice waarmee ontwikkelaars met gegevens kunnen werken met behulp van verschillende standaard-API's, zoals SQL, MongoDB, Graph en Azure Table Storage.
Afhankelijkheid instellen
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
</dependency>
Configuratie
Notitie
Als u een beveiligingsprincipaal gebruikt om te verifiëren en autoriseren met Microsoft Entra ID voor toegang tot een Azure-resource, moet u ervoor zorgen dat aan de beveiligingsprincipaal voldoende machtigingen zijn verleend voor toegang tot de Azure-resource. Zie Toegang autoriseren met Microsoft Entra IDvoor meer informatie.
De volgende tabel bevat de configureerbare eigenschappen van spring-cloud-azure-starter-data-cosmos:
| Eigenschap | Beschrijving |
|---|---|
spring.cloud.azure.cosmos.enabled |
Een waarde die aangeeft of Azure Cosmos DB Service is ingeschakeld. De standaardwaarde is true. |
spring.cloud.azure.cosmos.database |
Het Azure Cosmos DB-database-id. |
spring.cloud.azure.cosmos.endpoint |
De URI om Verbinding te maken met Azure Cosmos DB. |
spring.cloud.azure.cosmos.key |
De PrivateKey om Verbinding te maken met Azure Cosmos DB. |
spring.cloud.azure.cosmos.credential.client-certificate-password |
Het wachtwoord van het certificaatbestand. |
spring.cloud.azure.cosmos.credential.client-certificate-path |
Het pad naar een PEM-certificaatbestand dat moet worden gebruikt bij service-principalverificatie met Azure. |
spring.cloud.azure.cosmos.credential.client-id |
De client-id die moet worden gebruikt bij het uitvoeren van service-principal-verificatie met Azure. |
spring.cloud.azure.cosmos.credential.client-secret |
Het clientgeheim dat moet worden gebruikt bij het uitvoeren van service-principal-verificatie met Azure. |
spring.cloud.azure.cosmos.credential.managed-identity-enabled |
Of beheerde identiteit moet worden ingeschakeld. De standaardwaarde is false. |
spring.cloud.azure.cosmos.credential.password |
Het wachtwoord dat moet worden gebruikt bij het uitvoeren van verificatie met gebruikersnaam en wachtwoord met Azure. |
spring.cloud.azure.cosmos.credential.username |
De gebruikersnaam die moet worden gebruikt bij het uitvoeren van verificatie met gebruikersnaam en wachtwoord met Azure. |
spring.cloud.azure.cosmos.populate-query-metrics |
Een waarde die aangeeft of diagnostische tekenreeksen en metrische querygegevens moeten worden ingevuld. De standaardwaarde is false. |
spring.cloud.azure.cosmos.consistency-level |
Een consistentieniveau voor Azure Cosmos DB. |
Sleutelbegrippen
In de volgende lijst ziet u de belangrijkste concepten van de Spring Data-ondersteuning:
De Spring Data-
CrudRepositoryenReactiveCrudRepository, die de volgende eenvoudige CRUD-functionaliteit bieden:- opslaan
- vindAlles
- vindEén op ID
- verwijderAlles
- verwijderen op basis van ID
- entiteit verwijderen
De Spring Data @Id aantekening. Er zijn twee manieren om een veld in een domeinklasse toe te wijzen aan de
idvan een Azure Cosmos DB-document:- Aantekeningen toevoegen aan een veld in domeinklasse met
@Id. Dit veld wordt toegewezen aan documentidin Azure Cosmos DB. - Stel de naam van dit veld in op
id. Dit veld wordt toegewezen aan documentidin Azure Cosmos DB.
Notitie
Als beide manieren worden toegepast, heeft de
@Idaantekening een hogere prioriteit.- Aantekeningen toevoegen aan een veld in domeinklasse met
Aangepaste verzamelingsnamen. De verzamelingsnaam is standaard de klassenaam van de gebruikersdomeinklasse. Als u deze wilt aanpassen, voegt u aantekeningen toe
@Document(collection="myCustomCollectionName")aan uw domeinklasse, dat is alles.Ondersteunt Azure Cosmos DB-partitie. Als u een veld van uw domeinklasse wilt opgeven als een partitiesleutelveld, moet u er aantekeningen aan toevoegen met
@PartitionKey. Wanneer u CRUD-bewerkingen uitvoert, geeft u de partitiewaarde op. Zie AddressRepositoryIT.java op GitHub voor meer voorbeelden.Ondersteunt aangepaste Spring Data-query zoekbewerking.
Ondersteunt
spring-boot-starter-data-rest.Ondersteunt lijsttypen en geneste typen in domeinklassen.
Basisgebruik
Een persoonlijke sleutel gebruiken voor toegang tot Azure Cosmos DB
De eenvoudigste manier om Azure Cosmos DB te verbinden met spring-cloud-azure-starter-data-cosmos is met een primaire sleutel. Voeg de volgende eigenschappen toe:
spring:
cloud:
azure:
cosmos:
key: ${AZURE_COSMOS_KEY}
endpoint: ${AZURE_COSMOS_ENDPOINT}
database: ${AZURE_COSMOS_DATABASE}
Een entiteit definiëren
Definieer een entiteit als een document in Azure Cosmos DB, zoals wordt weergegeven in het volgende voorbeeld:
@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);
}
}
Het veld id wordt gebruikt als het document id in Azure Cosmos DB. U kunt ook aantekeningen toevoegen aan elk veld met @Id om het toe te wijzen aan het document id.
De aantekening @Container(containerName = "mycollection") wordt gebruikt om de naam van de verzameling van uw document in Azure Cosmos DB op te geven.
Opslagplaatsen maken
Als u opslagplaatsen wilt maken, kunt u de ReactiveCosmosRepository-interface uitbreiden, die ondersteuning biedt voor Spring Data-opslagplaatsen.
@Repository
public interface UserRepository extends ReactiveCosmosRepository<User, String> {
Flux<User> findByFirstName(String firstName);
}
Op dit moment biedt de ReactiveCosmosRepository interface eenvoudige bewerkingen voor opslaan, verwijderen en zoeken. Later worden meer bewerkingen ondersteund.
Een toepassingsklasse maken
In het volgende voorbeeld wordt een toepassingsklasse gemaakt met alle onderdelen:
@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();
}
}
Dit voorbeeld bevat een autowired UserRepository interface ter ondersteuning van bewerkingen voor opslaan, verwijderen en zoeken.
Voorbeelden
Bekijk de azure-spring-boot-samples op GitHub.
Naast het gebruik van de spring-cloud-azure-starter-data-cosmos-bibliotheek kunt u azure-spring-data-cosmos bibliotheek rechtstreeks gebruiken voor complexere scenario's. Zie Spring Data voor Azure Cosmos DB-clientbibliotheekvoor meer informatie.