Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как azure Spring Cloud и Spring Data можно использовать вместе.
Поддержка Spring Data Azure Cosmos DB
Azure Cosmos DB — это глобально распределенная служба баз данных, которая позволяет разработчикам работать с данными с помощью различных стандартных API, таких как SQL, MongoDB, Graph и хранилище таблиц Azure.
Настройка зависимостей
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
</dependency>
Конфигурация
Заметка
Если вы используете субъект безопасности для проверки подлинности и авторизации с помощью идентификатора Microsoft Entra для доступа к ресурсу Azure, убедитесь, что субъект безопасности предоставлен достаточно разрешений для доступа к ресурсу Azure. Дополнительные сведения см. в разделе Авторизация доступа с помощьюидентификатора Microsoft Entra.
В следующей таблице перечислены настраиваемые свойства spring-cloud-azure-starter-data-cosmos:
| Свойство | Описание |
|---|---|
| spring.cloud.azure.cosmos.enabled | Значение, указывающее, включена ли служба Azure Cosmos DB. Значение по умолчанию — true. |
| spring.cloud.azure.cosmos.database | Идентификатор базы данных Azure Cosmos DB. |
| spring.cloud.azure.cosmos.endpoint | Универсальный код ресурса (URI) для подключения к Azure Cosmos DB. |
| Spring.cloud.azure.cosmos.key | PrivateKey для подключения к Azure Cosmos DB. |
| spring.cloud.azure.cosmos.credential.client-certificate-password | Пароль файла сертификата. |
| spring.cloud.azure.cosmos.credential.client-certificate-path | Путь к файлу сертификата PEM, используемому при выполнении проверки подлинности субъекта-службы с помощью Azure. |
| spring.cloud.azure.cosmos.credential.client-id | Идентификатор клиента, используемый при выполнении проверки подлинности субъекта-службы с помощью Azure. |
| spring.cloud.azure.cosmos.credential.client-secret | Секрет клиента, используемый при проверке подлинности субъекта-службы с помощью Azure. |
| spring.cloud.azure.cosmos.credential.managed-identity-enabled | Следует ли включить управляемое удостоверение. Значение по умолчанию — false. |
| spring.cloud.azure.cosmos.credential.password | Пароль, используемый при выполнении проверки подлинности имени пользователя или пароля в Azure. |
| spring.cloud.azure.cosmos.credential.username | Имя пользователя, используемое при выполнении проверки подлинности имени пользователя и пароля в Azure. |
| spring.cloud.azure.cosmos.populate-query-metrics | Значение, указывающее, заполнять ли строки диагностики и метрики запросов. Значение по умолчанию — false. |
| spring.cloud.azure.cosmosуровня согласованности | Уровень согласованности для Azure Cosmos DB. |
Основные понятия
В следующем списке показаны основные понятия поддержки Spring Data:
CrudRepositorySpring Data иReactiveCrudRepository, которые предоставляют следующие основные функциональные возможности CRUD:- спасать
- findAll (найти все)
- НайтиОдин по идентификатору
- удалить все
- Удаление по идентификатору
- Удаление сущности
Заметка spring Data @Id. Существует два способа сопоставления поля в классе домена с
idдокумента Azure Cosmos DB:- Заметите поле в классе домена с
@Id. Это поле будет сопоставлено с документомidв Azure Cosmos DB. - Задайте для этого поля значение
id. Это поле будет сопоставлено с документомidв Azure Cosmos DB.
Заметка
Если применяются оба способа,
@Idзаметка имеет более высокий приоритет.- Заметите поле в классе домена с
Имена пользовательских коллекций. По умолчанию имя коллекции будет классом класса класса домена пользователя. Чтобы настроить его, добавьте заметки
@Document(collection="myCustomCollectionName")в класс домена, это все.Поддерживает секции Azure Cosmos DB. Чтобы указать поле класса домена, чтобы быть полем ключа секции, заметьте его с помощью
@PartitionKey. При выполнении операций CRUD укажите значение секции. Дополнительные примеры см. в AddressRepositoryIT.java на сайте GitHub.Поддерживает пользовательские запросы Spring Data операции поиска.
Поддерживает spring-boot-starter-data-rest.
Поддерживает список и вложенные типы в классах домена.
Базовое использование
Использование закрытого ключа для доступа к Azure Cosmos DB
Самый простой способ подключения Azure Cosmos DB к spring-cloud-azure-starter-data-cosmos — это первичный ключ. Добавьте следующие свойства:
spring:
cloud:
azure:
cosmos:
key: ${AZURE_COSMOS_KEY}
endpoint: ${AZURE_COSMOS_ENDPOINT}
database: ${AZURE_COSMOS_DATABASE}
Определение сущности
Определите сущность как документ в Azure Cosmos DB, как показано в следующем примере:
@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);
}
}
Поле id будет использоваться в качестве документа id в Azure Cosmos DB. Кроме того, вы можете анонимировать любое поле с @Id, чтобы сопоставить его с документом id.
Заметка @Container(containerName = "mycollection") используется для указания имени коллекции документа в Azure Cosmos DB.
Создание репозиториев
Чтобы создать репозитории, расширьте интерфейс ReactiveCosmosRepository, который обеспечивает поддержку репозитория Spring Data.
@Repository
public interface UserRepository extends ReactiveCosmosRepository<User, String> {
Flux<User> findByFirstName(String firstName);
}
В настоящее время интерфейс ReactiveCosmosRepository предоставляет основные операции сохранения, удаления и поиска. Дополнительные операции будут поддерживаться позже.
Создание класса приложения
В следующем примере создается класс приложения со всеми компонентами:
@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();
}
}
В этом примере включается автоматический интерфейс UserRepository для поддержки операций сохранения, удаления и поиска.
Образцы
См. azure-spring-boot-samples на сайте GitHub.
Помимо использования библиотеки spring-cloud-azure-starter-data-cosmos, вы можете напрямую использовать библиотеку azure-spring-data-cosmos для более сложных сценариев. Дополнительные сведения см. в Spring Data для клиентской библиотеки Azure Cosmos DB.