Acceso a datos con la API NoSQL de Azure Cosmos DB
En este artículo se muestra cómo agregar 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 de distribución global que permite a los desarrolladores trabajar con datos mediante diversas API estándar, como SQL, MongoDB, Graph y Table. 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.
Requisitos previos
Una suscripción a Azure: cree una cuenta gratuita.
Kit de desarrollo de Java (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 datos y, luego, elija Azure Cosmos DB.
En la pantalla Crear una cuenta de Azure Cosmos DB, seleccione Azure Cosmos DB para NoSQL.
En la página Azure Cosmos DB, escriba la información siguiente:
- Elija la suscripción que quiere usar para la base de datos.
- Especifique si quiere crear un nuevo grupo de recursos para la base de datos o elija un grupo de recursos diferente.
- 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, aparece en el panel de Azure y, 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 Incorporación de una base de datos y un contenedor de Inicio rápido: Creación de una cuenta, una base de datos, un contenedor y elementos de Azure Cosmos DB desde Azure Portal. Puede seleccionar la base de datos en 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 Owner
rol 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
Use los pasos siguientes para crear un nuevo proyecto de aplicación de Spring Boot con el soporte técnico de Azure. Como alternativa, puede usar el ejemplo spring-cloud-azure-data-cosmos-sample en el repositorio azure-spring-boot-samples . Después, puede ir directamente a Compilación y prueba de la aplicación.
Vaya a https://start.spring.io/.
Especifique las opciones siguientes:
- Genere un proyecto de Maven con Java.
- Especifique la versión de Spring Boot en 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 mayor que la versión admitida por 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 pida, descargue el proyecto en una ruta de acceso del equipo local y extraiga los archivos.
La aplicación simple de 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 más información sobre cómo administrar las versiones de la biblioteca de Azure de Spring Cloud mediante una lista de materiales (BOM), consulte la sección Introducción de la guía para desarrolladores de Azure de Spring Cloud.
Guarde y cierre el archivo pom.xml.
Configuración de la aplicación de Spring Boot para usar su base de datos de Azure Cosmos DB
Busque el archivo application.properties en el directorio resources de su 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 agréguele las siguientes líneas; a continuación, sustituya los valores de ejemplo por las propiedades adecuadas de su 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 ejemplo de código para implementar funcionalidad básica de 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 y guardarla en la User
base de datos.
Definición de una clase base para almacenar datos de usuario
Cree un nuevo archivo llamado User.java en el mismo directorio que el archivo de Java de la aplicación principal.
Abra el archivo User.java en un editor de texto y agréguele las siguientes líneas para definir una clase de usuario genérica que almacene y recupere valores de 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 del repositorio de datos
Cree un nuevo archivo llamado UserRepository.java en el mismo directorio que el archivo de Java de la aplicación principal.
Abra el archivo UserRepository.java en un editor de texto y agréguele las siguientes líneas 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 a la interfazDocumentDbRepository
de la versión anterior del iniciador. 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 de 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 de 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 de Java de la aplicación principal.
Compilación y prueba de la aplicación
Abra un símbolo del sistema y vaya a 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 acerca de Spring y Azure, vaya al centro de documentación de Azure.
Más recursos
Para más información sobre el uso de Azure Cosmos DB y Java, consulte los siguientes artículos:
Para obtener 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 Azure App Service en Linux
Ejecución de 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).
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 de Java independientes. Para ayudar a los desarrolladores a empezar con Spring Boot, hay varios paquetes de ejemplo de Spring Boot disponibles en https://github.com/spring-guides/. Además de elegir de la lista de proyectos básicos de Spring Boot, el Spring Initializr ayuda a los desarrolladores en los primeros pasos para crear aplicaciones de Spring Boot personalizadas.