Acceso a datos con la API NoSQL de Azure Cosmos DB
En este artículo se muestra cómo agregar el Spring Cloud Azure Starter para Spring Data para Azure Cosmos DB a una aplicación personalizada. Este inicio le permite almacenar datos en la base de datos de Azure Cosmos DB y recuperarlos mediante Spring Data y Azure Cosmos DB para NoSQL. El artículo comienza mostrando cómo crear una instancia de Azure Cosmos DB a través de Azure Portal. A continuación, en el artículo se muestra cómo usar Spring Initializr para crear una aplicación personalizada de Spring Boot que puede usar con Spring Boot Starter.
Azure Cosmos DB es un servicio de base de datos distribuido globalmente que permite a los desarrolladores trabajar con datos mediante diversas API estándar, como SQL, MongoDB, Graph y Table API. Spring Boot Starter de Microsoft permite a los desarrolladores usar aplicaciones de Spring Boot que se integran fácilmente con Azure Cosmos DB para NoSQL.
Prerrequisitos
Una suscripción de Azure: puedes crear una suscripción gratuita.
Java Development Kit (JDK), versión 8 o posterior.
Creación de una instancia de Azure Cosmos DB mediante Azure Portal
Siga estos pasos para crear una instancia de Azure Cosmos DB:
Vaya a Azure Portal y seleccione Crear un recurso.
Seleccione Bases de datosy, después, seleccione azure Cosmos DB.
En la pantalla Crear una cuenta de Azure Cosmos DB, seleccione Azure Cosmos DB for NoSQL.
En la página de Azure Cosmos DB, escriba la siguiente información:
- Elija la suscripción que quieres usar para la base de datos.
- Especifique si desea crear un nuevo grupo de recursos para tu base de datos, o elija un grupo de recursos existente.
- Escriba un nombre de cuenta único, que se usa como URI para la base de datos. Por ejemplo: contosoaccounttest.
- Especifique la ubicación de la base de datos.
- Seleccione Aplicar descuento de nivel gratis si desea crear una cuenta solo con fines de demostración.
- Deje el resto de las opciones y la configuración predeterminadas tal como está.
Seleccione Revisar y crear, revise las especificaciones y seleccione Crear.
Cuando se ha creado la base de datos, se muestra en el Panel de Azure, en las páginas Todos los recursos y Azure Cosmos DB. Para crear una base de datos y un contenedor para una instancia de Azure Cosmos DB recién creada, consulte la sección Agregar una base de datos y un contenedor de Inicio rápido: Creación de una cuenta, base de datos, contenedor y elementos de Azure Cosmos DB desde Azure Portal. Puede seleccionar la base de datos para cualquiera de esas ubicaciones para abrir la página de propiedades de la memoria caché.
Cuando se muestre la página de propiedades de la base de datos, seleccione Claves y copie el URI y las claves de acceso de la base de datos. Estos valores se usan en la aplicación Spring Boot.
Importante
En la instancia de Azure Cosmos DB recién creada, asigne el rol Owner
a la cuenta de Azure que está usando actualmente. Para más información, consulte Asignación de roles de Azure mediante Azure Portal.
Creación de una aplicación de Spring Boot con Spring Initializr
Siga estos pasos para crear un nuevo proyecto de aplicación de Spring Boot con soporte técnico de Azure. También puede usar el ejemplo spring-cloud-azure-data-cosmos-sample del repositorio azure-spring-boot-samples. A continuación, puedes ir directamente a Compilar y probar la aplicación.
Explore en https://start.spring.io/.
Especifique las siguientes opciones:
- Genere un proyecto de Maven con Java.
- Especifique la versión de Spring Boot como 2.7.11.
- Especifique los nombres de Group (Grupo) y Artifact (Artefacto) de la aplicación.
- Seleccione 17 para la versión de Java.
- Agregue compatibilidad para Azure en las dependencias.
Nota
Spring Initializr usa los nombres de Group (Grupo) y Artifact (Artefacto) para crear el nombre del paquete, por ejemplo: com.example.wingtiptoysdata.
La versión de Spring Boot puede ser superior a la versión compatible con el soporte técnico de Azure. Una vez generado automáticamente el proyecto, puede cambiar manualmente la versión de Spring Boot a la versión más alta compatible con Azure, que puede encontrar en Spring-Versions-Mapping.
Cuando haya especificado las opciones enumeradas anteriormente, seleccione GENERAR.
Cuando se le solicite, descargue el proyecto en una ruta de acceso en el equipo local y extraiga los archivos.
La sencilla aplicación Spring Boot ya está lista para su edición.
Configuración de la aplicación de Spring Boot para usar Azure Spring Boot Starter
Busque el archivo pom.xml en el directorio de la aplicación; por ejemplo:
C:\SpringBoot\wingtiptoysdata\pom.xml
O bien
/users/example/home/wingtiptoysdata/pom.xml
Abra el archivo pom.xml en un editor de texto y agregue lo siguiente al elemento
<dependencies>
:<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-data-cosmos</artifactId> </dependency>
Nota
Para obtener más información sobre cómo administrar las versiones de la biblioteca de Spring Cloud Azure mediante una lista de materiales (BOM), consulte la sección Introducción de la guía para desarrolladores de Spring Cloud Azure.
Guarde y cierre el archivo pom.xml.
Configuración de la aplicación Spring Boot para usar Azure Cosmos DB
Busque el archivo application.properties en el directorio de recursos de la aplicación; por ejemplo:
C:\SpringBoot\wingtiptoysdata\src\main\resources\application.properties
O bien
/users/example/home/wingtiptoysdata/src/main/resources/application.properties
Abra el archivo application.properties en un editor de texto y agregue las líneas siguientes al archivo y reemplace los valores de ejemplo por las propiedades adecuadas para la base de datos:
# Specify the DNS URI of your Azure Cosmos DB. spring.cloud.azure.cosmos.endpoint=https://contosoaccounttest.documents.azure.com:443/ spring.cloud.azure.cosmos.key=your-cosmosdb-account-key # Specify the name of your database. spring.cloud.azure.cosmos.database=contosoaccounttest spring.cloud.azure.cosmos.populate-query-metrics=true
Guarde y cierre el archivo application.properties.
Adición de código de ejemplo para implementar la funcionalidad básica de la base de datos
En esta sección, creará dos clases de Java para almacenar datos de usuario. A continuación, modifique la clase de aplicación principal para crear una instancia de la clase User
y guardarla en la base de datos.
Definición de una clase base para almacenar datos de usuario
Cree un nuevo archivo denominado User.java en el mismo directorio que el archivo Java de la aplicación principal.
Abra el archivo User.java en un editor de texto y agregue las siguientes líneas al archivo para definir una clase de usuario genérica que almacene y recupere valores en la base de datos:
package com.example.wingtiptoysdata; import com.azure.spring.data.cosmos.core.mapping.Container; import com.azure.spring.data.cosmos.core.mapping.PartitionKey; import org.springframework.data.annotation.Id; @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); } }
Guarde y cierre el archivo User.java.
Definición de una interfaz de repositorio de datos
Cree un nuevo archivo denominado UserRepository.java en el mismo directorio que el archivo Java de la aplicación principal.
Abra el archivo UserRepository.java en un editor de texto y agregue las siguientes líneas al archivo para definir una interfaz de repositorio de usuario que extienda la interfaz de
ReactiveCosmosRepository
predeterminada:package com.example.wingtiptoysdata; import com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository; import org.springframework.stereotype.Repository; import reactor.core.publisher.Flux; @Repository public interface UserRepository extends ReactiveCosmosRepository<User, String> { Flux<User> findByFirstName(String firstName); }
La interfaz
ReactiveCosmosRepository
reemplaza la interfazDocumentDbRepository
de la versión anterior del inicio. La nueva interfaz proporciona API sincrónicas y reactivas para las operaciones básicas de guardado, eliminación y búsqueda.Guarde y cierre el archivo UserRepository.java.
Modificación de la clase de aplicación principal
Busque el archivo Java de la aplicación principal en el directorio del paquete de la aplicación, por ejemplo:
C:\SpringBoot\wingtiptoysdata\src\main\java\com\example\wingtiptoysdata\WingtiptoysdataApplication.java
O bien
/users/example/home/wingtiptoysdata/src/main/java/com/example/wingtiptoysdata/WingtiptoysdataApplication.java
Abra el archivo Java de la aplicación principal en un editor de texto y agregue las siguientes líneas al archivo:
package com.example.wingtiptoysdata; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.util.Assert; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.Optional; @SpringBootApplication public class WingtiptoysdataApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(WingtiptoysdataApplication.class); @Autowired private UserRepository repository; public static void main(String[] args) { SpringApplication.run(WingtiptoysdataApplication.class, args); } public void run(String... var1) { this.repository.deleteAll().block(); LOGGER.info("Deleted all data in container."); 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()); } }
Guarde y cierre el archivo Java de la aplicación principal.
Compilación y prueba de la aplicación
Abra una ventana de comandos y navegue hacia la carpeta donde se encuentra el archivo pom.xml; por ejemplo:
cd C:\SpringBoot\wingtiptoysdata
O bien
cd /users/example/home/wingtiptoysdata
Use el siguiente comando para compilar y ejecutar la aplicación:
./mvnw clean
Este comando ejecuta la aplicación automáticamente como parte de la fase de prueba. También puede usar:
./mvnw spring-boot:run
Después de una salida de compilación y prueba, la ventana de la consola muestra un mensaje similar al ejemplo siguiente:
INFO 1365 --- [ main] c.e.w.WingtiptoysdataApplication : Deleted all data in container. ... (omitting connection and diagnostics output) ... INFO 1365 --- [ main] c.e.w.WingtiptoysdataApplication : findOne in User collection get result: testFirstName testLastName, test address line one
Estos mensajes de salida indican que los datos se guardaron correctamente en Azure Cosmos DB y, a continuación, se recuperaron de nuevo.
Limpieza de recursos
Si no va a seguir usando esta aplicación, asegúrese de eliminar el grupo de recursos que contiene Azure Cosmos DB que creó anteriormente. Puede eliminar el grupo de recursos de Azure Portal.
Pasos siguientes
Para más información sobre Spring y Azure, continúe con el Centro de documentación de Spring en Azure.
Más recursos
Para más información sobre el uso de Azure Cosmos DB y Java, consulte los siguientes artículos:
Para más información sobre el uso de aplicaciones de Spring Boot en Azure, consulte los siguientes artículos:
[Spring Cloud Azure Starter para Spring Data Azure Cosmos DB]
Implementación de una aplicación de Spring Boot en Linux en Azure App Service
ejecutar una aplicación de Spring Boot en un clúster de Kubernetes en azure Container Service
Para más información sobre el uso de Azure con Java, consulte Azure para desarrolladores de Java y Working with Azure DevOps and Java (Trabajo con Azure DevOps y Java).
El Spring Framework es una solución de código abierto que ayuda a los desarrolladores de Java a crear aplicaciones de nivel empresarial. Uno de los proyectos más populares que se basa en esa plataforma es Spring Boot, que proporciona un enfoque simplificado para crear aplicaciones Java independientes. Para ayudar a los desarrolladores a empezar a trabajar con Spring Boot, hay varios paquetes de Spring Boot de ejemplo disponibles en https://github.com/spring-guides/. Además de elegir entre la lista de proyectos básicos de Spring Boot, el Spring Initializr ayuda a los desarrolladores a empezar a crear aplicaciones personalizadas de Spring Boot.