Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano, jak platformy Spring Cloud i spring Data można używać razem.
Obsługa usługi Spring Data w usłudze Azure Cosmos DB
azure Cosmos DB to globalnie rozproszona usługa bazy danych, która umożliwia deweloperom pracę z danymi przy użyciu różnych standardowych interfejsów API, takich jak SQL, MongoDB, Graph i Azure Table Storage.
Konfiguracja zależności
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
</dependency>
Konfiguracja
Nuta
Jeśli używasz podmiotu zabezpieczeń do uwierzytelniania i autoryzacji za pomocą identyfikatora Entra firmy Microsoft na potrzeby uzyskiwania dostępu do zasobu platformy Azure, upewnij się, że podmiot zabezpieczeń otrzymał wystarczające uprawnienia dostępu do zasobu platformy Azure. Aby uzyskać więcej informacji, zobacz Authorize access with Microsoft Entra ID.
W poniższej tabeli wymieniono konfigurowalne właściwości spring-cloud-azure-starter-data-cosmos:
| Własność | Opis |
|---|---|
spring.cloud.azure.cosmos.enabled |
Wartość wskazująca, czy usługa Azure Cosmos DB jest włączona. Wartość domyślna to true. |
spring.cloud.azure.cosmos.database |
Identyfikator bazy danych usługi Azure Cosmos DB. |
spring.cloud.azure.cosmos.endpoint |
Identyfikator URI umożliwiający połączenie z usługą Azure Cosmos DB. |
spring.cloud.azure.cosmos.key |
Klucz prywatny łączący usługę Azure Cosmos DB. |
spring.cloud.azure.cosmos.credential.client-certificate-password |
Hasło pliku certyfikatu. |
spring.cloud.azure.cosmos.credential.client-certificate-path |
Ścieżka pliku certyfikatu PEM do użycia podczas przeprowadzania uwierzytelniania jednostki usługi za pomocą platformy Azure. |
spring.cloud.azure.cosmos.credential.client-id |
Identyfikator klienta do użycia podczas przeprowadzania uwierzytelniania jednostki usługi na platformie Azure. |
spring.cloud.azure.cosmos.credential.client-secret |
Klucz tajny klienta używany podczas przeprowadzania uwierzytelniania jednostki usługi za pomocą platformy Azure. |
spring.cloud.azure.cosmos.credential.managed-identity-enabled |
Czy włączyć tożsamość zarządzaną. Wartość domyślna to false. |
spring.cloud.azure.cosmos.credential.password |
Hasło do użycia podczas uwierzytelniania nazwy użytkownika/hasła na platformie Azure. |
spring.cloud.azure.cosmos.credential.username |
Nazwa użytkownika używana podczas przeprowadzania uwierzytelniania nazwy użytkownika/hasła na platformie Azure. |
spring.cloud.azure.cosmos.populate-query-metrics |
Wartość wskazująca, czy wypełnić ciągi diagnostyczne i metryki zapytania. Wartość domyślna to false. |
spring.cloud.azure.cosmos.consistency-level |
poziom spójności dla usługi Azure Cosmos DB. |
Kluczowe pojęcia
Na poniższej liście przedstawiono kluczowe pojęcia dotyczące obsługi rozwiązania Spring Data:
CrudRepositorySpring Data iReactiveCrudRepository, które zapewniają następujące podstawowe funkcje CRUD:- zapisać
- findAll
- findOne według identyfikatora
- usuńWszystko
- usuń według identyfikatora
- usuwanie jednostki
Adnotacja Spring Data @Id. Istnieją dwa sposoby mapowania pola w klasie domeny na
iddokumentu usługi Azure Cosmos DB:- Dodawanie adnotacji do pola w klasie domeny przy użyciu
@Id. To pole zostanie zamapowane na dokumentidw usłudze Azure Cosmos DB. - Ustaw nazwę tego pola na
id. To pole zostanie zamapowane na dokumentidw usłudze Azure Cosmos DB.
Nuta
W przypadku zastosowania obu sposobów adnotacja
@Idma wyższy priorytet.- Dodawanie adnotacji do pola w klasie domeny przy użyciu
Nazwy kolekcji niestandardowych. Domyślnie nazwa kolekcji będzie nazwą klasy klasy domeny użytkownika. Aby go dostosować, dodaj adnotację
@Document(collection="myCustomCollectionName")do klasy domeny, to wszystko.Obsługuje partycji usługi Azure Cosmos DB. Aby określić pole klasy domeny jako pole klucza partycji, dodaj do niego adnotację przy użyciu
@PartitionKey. Podczas wykonywania operacji CRUD określ wartość partycji. Aby uzyskać więcej przykładów, zobacz AddressRepositoryIT.java w witrynie GitHub.Obsługuje niestandardowe zapytanie Spring Data operacji znajdowania.
Obsługuje element
spring-boot-starter-data-rest.Obsługuje typy list i zagnieżdżone w klasach domen.
Podstawowe użycie
Uzyskiwanie dostępu do usługi Azure Cosmos DB przy użyciu klucza prywatnego
Najprostszym sposobem łączenia usługi Azure Cosmos DB z spring-cloud-azure-starter-data-cosmos jest użycie klucza podstawowego. Dodaj następujące właściwości:
spring:
cloud:
azure:
cosmos:
key: ${AZURE_COSMOS_KEY}
endpoint: ${AZURE_COSMOS_ENDPOINT}
database: ${AZURE_COSMOS_DATABASE}
Definiowanie jednostki
Zdefiniuj jednostkę jako dokument w usłudze Azure Cosmos DB, jak pokazano w poniższym przykładzie:
@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);
}
}
Pole id będzie używane jako id dokumentu w usłudze Azure Cosmos DB. Alternatywnie możesz dodać adnotacje do dowolnego pola z @Id, aby zamapować je na dokument id.
Adnotacja @Container(containerName = "mycollection") służy do określania nazwy kolekcji dokumentu w usłudze Azure Cosmos DB.
Tworzenie repozytoriów
Aby utworzyć repozytoria, rozszerz interfejs ReactiveCosmosRepository, który zapewnia obsługę repozytorium Spring Data.
@Repository
public interface UserRepository extends ReactiveCosmosRepository<User, String> {
Flux<User> findByFirstName(String firstName);
}
Obecnie interfejs ReactiveCosmosRepository zapewnia podstawowe operacje zapisywania, usuwania i znajdowania. Więcej operacji będzie obsługiwanych później.
Tworzenie klasy aplikacji
Poniższy przykład tworzy klasę aplikacji ze wszystkimi składnikami:
@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();
}
}
W tym przykładzie przedstawiono interfejs automatycznego UserRepository do obsługi operacji zapisywania, usuwania i znajdowania.
Próbki
Zobacz w witrynie azure-spring-boot-samples GitHub.
Oprócz korzystania z biblioteki spring-cloud-azure-starter-data-cosmos można bezpośrednio użyć biblioteki azure-spring-data-cosmos w bardziej złożonych scenariuszach. Aby uzyskać więcej informacji, zobacz Spring Data for Azure Cosmos DB client library.