Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur Spring Cloud Azure och Spring Data kan användas tillsammans.
Stöd för Spring Data Azure Cosmos DB
Azure Cosmos DB är en globalt distribuerad databastjänst som gör att utvecklare kan arbeta med data med hjälp av olika standard-API:er, till exempel SQL, MongoDB, Graph och Azure Table Storage.
Beroendekonfiguration
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
</dependency>
Konfiguration
Not
Om du använder ett säkerhetsobjekt för att autentisera och auktorisera med Microsoft Entra-ID för åtkomst till en Azure-resurs måste du se till att säkerhetsobjektet har beviljats tillräcklig behörighet för att få åtkomst till Azure-resursen. Mer information finns i Auktorisera åtkomst med Microsoft Entra-ID.
I följande tabell visas de konfigurerbara egenskaperna för spring-cloud-azure-starter-data-cosmos:
| Egenskap | Beskrivning |
|---|---|
spring.cloud.azure.cosmos.enabled |
Ett värde som anger om Azure Cosmos DB-tjänsten är aktiverad. Standardvärdet är true. |
spring.cloud.azure.cosmos.database |
Azure Cosmos DB-databas-ID. |
spring.cloud.azure.cosmos.endpoint |
URI:n för att ansluta Azure Cosmos DB. |
spring.cloud.azure.cosmos.key |
PrivateKey för att ansluta Azure Cosmos DB. |
spring.cloud.azure.cosmos.credential.client-certificate-password |
Lösenordet för certifikatfilen. |
spring.cloud.azure.cosmos.credential.client-certificate-path |
Sökvägen till en PEM-certifikatfil som ska användas vid autentisering med tjänstens huvudnamn med Azure. |
spring.cloud.azure.cosmos.credential.client-id |
Det klient-ID som ska användas när du utför autentisering med tjänstens huvudnamn med Azure. |
spring.cloud.azure.cosmos.credential.client-secret |
Klienthemligheten som ska användas när du utför autentisering med tjänstens huvudnamn med Azure. |
spring.cloud.azure.cosmos.credential.managed-identity-enabled |
Om du vill aktivera hanterad identitet. Standardvärdet är false. |
spring.cloud.azure.cosmos.credential.password |
Lösenordet som ska användas när du utför autentisering med användarnamn/lösenord med Azure. |
spring.cloud.azure.cosmos.credential.username |
Användarnamnet som ska användas när du utför autentisering med användarnamn/lösenord med Azure. |
spring.cloud.azure.cosmos.populate-query-metrics |
Ett värde som anger om diagnostiksträngar och frågemått ska fyllas i. Standardvärdet är false. |
spring.cloud.azure.cosmos.consistency-level |
En konsekvensnivå för Azure Cosmos DB. |
Viktiga begrepp
I följande lista visas huvudbegreppen för Spring Data-stödet:
Spring Data
CrudRepositoryochReactiveCrudRepository, som tillhandahåller följande grundläggande CRUD-funktioner:- spara
- hittaAlla
- findOne efter ID
- radera alla
- ta bort med ID
- ta bort entitet
Spring Data-@Id kommentar. Det finns två sätt att mappa ett fält i en domänklass till
idi ett Azure Cosmos DB-dokument:- Kommentera ett fält i domänklassen med
@Id. Det här fältet mappas till dokumentidi Azure Cosmos DB. - Ange namnet på fältet till
id. Det här fältet mappas till dokumentidi Azure Cosmos DB.
Not
Om båda sätten tillämpas har
@Idanteckning högre prioritet.- Kommentera ett fält i domänklassen med
Anpassade samlingsnamn. Samlingsnamnet är som standard klassnamnet för användardomänklassen. Om du vill anpassa den lägger du till anteckningar
@Document(collection="myCustomCollectionName")till domänklassen, det är allt.Stöder Azure Cosmos DB-partition. Om du vill ange att ett fält i domänklassen ska vara ett partitionsnyckelfält kommenterar du det med
@PartitionKey. När du utför CRUD-åtgärder anger du partitionsvärdet. Fler exempel finns i AddressRepositoryIT.java på GitHub.Stöder anpassad Spring Data-fråga sökåtgärd.
Stöder
spring-boot-starter-data-rest.Stöder listtyper och kapslade typer i domänklasser.
Grundläggande användning
Använda en privat nyckel för att få åtkomst till Azure Cosmos DB
Det enklaste sättet att ansluta Azure Cosmos DB med spring-cloud-azure-starter-data-cosmos är med en primärnyckel. Lägg till följande egenskaper:
spring:
cloud:
azure:
cosmos:
key: ${AZURE_COSMOS_KEY}
endpoint: ${AZURE_COSMOS_ENDPOINT}
database: ${AZURE_COSMOS_DATABASE}
Definiera en entitet
Definiera en entitet som ett dokument i Azure Cosmos DB, enligt följande exempel:
@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);
}
}
Fältet id används som dokument id i Azure Cosmos DB. Alternativt kan du kommentera valfritt fält med @Id för att mappa det till dokumentet id.
Kommentaren @Container(containerName = "mycollection") används för att ange samlingsnamnet för dokumentet i Azure Cosmos DB.
Skapa lagringsplatser
Om du vill skapa lagringsplatser utökar du ReactiveCosmosRepository-gränssnittet, vilket ger stöd för Spring Data-lagringsplatsen.
@Repository
public interface UserRepository extends ReactiveCosmosRepository<User, String> {
Flux<User> findByFirstName(String firstName);
}
För närvarande tillhandahåller ReactiveCosmosRepository-gränssnittet grundläggande åtgärder för att spara, ta bort och hitta. Fler åtgärder kommer att stödjas senare.
Skapa en programklass
I följande exempel skapas en programklass med alla komponenter:
@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();
}
}
Det här exemplet innehåller ett autokodat UserRepository-gränssnitt som stöder åtgärder för att spara, ta bort och hitta.
Prover
Se på azure-spring-boot-samples GitHub.
Förutom att använda spring-cloud-azure-starter-data-cosmos-biblioteket kan du direkt använda azure-spring-data-cosmos-biblioteket för mer komplexa scenarier. Mer information finns i Spring Data för Azure Cosmos DB-klientbiblioteket.