Inicio rápido: Biblioteca de Azure Cosmos DB for NoSQL para Java
Introducción a la biblioteca cliente de Azure Cosmos DB for NoSQL para Java para consultar datos en los contenedores y realizar operaciones comunes en elementos individuales. Siga estos pasos para implementar una solución mínima en su entorno mediante la Azure Developer CLI.
Documentación de referencia de la API | Código fuente de la biblioteca | Paquete (Maven) | Azure Developer CLI
Requisitos previos
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Cuenta de GitHub
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- CLI de desarrollo de Azure
- Docker Desktop
Instalación
Implemente el contenedor de desarrollo de este proyecto en su entorno. A continuación, use la Azure Developer CLI (azd
) para crear una cuenta de Azure Cosmos DB for NoSQL e implementar una aplicación de ejemplo en contenedor. La aplicación de ejemplo usa la biblioteca cliente para administrar, crear, leer y consultar datos de ejemplo.
Importante
Las cuentas de GitHub incluyen un derecho de almacenamiento y horas de núcleo sin costo alguno. Para obtener más información, consulte el almacenamiento y las horas de núcleo incluidas para las cuentas de GitHub.
Abra un terminal en el directorio raíz del proyecto.
Autentíquese en Azure Developer CLI mediante
azd auth login
. Siga los pasos especificados por la herramienta para autenticarse en la CLI mediante sus credenciales de Azure preferidas.azd auth login
Ejecute
azd init
para inicializar el proyecto.azd init --template cosmos-db-nosql-dotnet-quickstart
Nota:
En este inicio rápido se usa el repositorio de GitHub azure-samples/cosmos-db-nosql-dotnet-quickstart plantilla. La Azure Developer CLI clonará automáticamente este proyecto en la máquina si aún no lo está.
Durante la inicialización, configure un nombre de entorno único.
Sugerencia
El nombre del entorno también se usará como nombre del grupo de recursos de destino. Para este inicio rápido, considere la posibilidad de usar
msdocs-cosmos-db
.Implemente la cuenta de Azure Cosmos DB mediante
azd up
. Las plantillas de Bicep también implementan una aplicación web de muestra.azd up
Durante el proceso de aprovisionamiento, seleccione la suscripción y la ubicación deseada. Espere a que se complete el proceso de aprovisionamiento. El proceso puede tardar aproximadamente cinco minutos.
Una vez realizado el aprovisionamiento de los recursos de Azure, se incluye una dirección URL a la aplicación web en ejecución en la salida.
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io> SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
Use la dirección URL de la consola para ir a la aplicación web en el explorador. Observe la salida de la aplicación en ejecución.
Instalación de la biblioteca cliente
La biblioteca cliente está disponible a través de Maven, como paquete azure-spring-data-cosmos
.
Vaya a la carpeta
/src/web
y abra el archivo pom.xml.Si aún no existe, agregue una entrada para el paquete
azure-spring-data-cosmos
.<dependency> <groupId>com.azure</groupId> <artifactId>azure-spring-data-cosmos</artifactId> </dependency>
Agregue también otra dependencia para el paquete
azure-identity
, si aún no existe.<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> </dependency>
Modelo de objetos
Nombre | Descripción |
---|---|
EnableCosmosRepositories |
Este tipo es un decorador de método que sirve para configurar un repositorio para acceder a Azure Cosmos DB for NoSQL. |
CosmosRepository |
Esta clase es la clase cliente principal y sirve para administrar datos dentro de un contenedor. |
CosmosClientBuilder |
Esta clase es un generador que sirve para crear un cliente usado por el repositorio. |
Query |
Este tipo es un decorador de método que sirve para especificar la consulta que ejecuta el repositorio. |
Ejemplos de código
- Autenticar el cliente
- Obtención de una base de datos
- Obtención de un contenedor
- Creación de un elemento
- Obtención de un elemento
- Elementos de consulta
El código de ejemplo de la plantilla usa una base de datos denominada cosmicworks
y un contenedor denominado products
. El contenedor products
contiene detalles como el nombre, la categoría, la cantidad, un identificador único y una marca de venta para cada producto. El contenedor usa la propiedad /category
como clave de partición lógica.
Autenticar el cliente
Deben autorizarse las solicitudes de aplicación a la mayor parte de servicios de Azure. Use el tipo DefaultAzureCredential
como forma preferida de implementar una conexión sin contraseña entre las aplicaciones y Azure Cosmos DB for NoSQL. DefaultAzureCredential
admite varios métodos de autenticación y determina el que se debe usar en tiempo de ejecución.
Importante
También puede autorizar directamente las solicitudes a los servicios de Azure mediante contraseñas, cadenas de conexión u otras credenciales. Sin embargo, este enfoque debe usarse con precaución. Los desarrolladores deben ser meticulosos y no exponer nunca estos secretos en una ubicación que no sea segura. Cualquier persona que obtenga acceso a la contraseña o a la clave secreta puede autenticarse en el servicio de base de datos. DefaultAzureCredential
ofrece ventajas de seguridad y administración mejoradas con respecto a la clave de cuenta para permitir la autenticación sin contraseña sin riesgo de almacenar claves.
En primer lugar, este ejemplo crea una clase que hereda de AbstractCosmosConfiguration
para configurar la conexión a Azure Cosmos DB for NoSQL.
@Configuration
@EnableCosmosRepositories
public class CosmosConfiguration extends AbstractCosmosConfiguration {
}
Dentro de la clase de configuración, este ejemplo crea una instancia de la clase CosmosClientBuilder
y configura la autenticación mediante una instancia DefaultAzureCredential
.
@Bean
public CosmosClientBuilder getCosmosClientBuilder() {
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.build();
return new CosmosClientBuilder()
.endpoint("<azure-cosmos-db-nosql-account-endpoint>")
.credential(credential);
}
Obtención de una base de datos
En la clase de configuración, el ejemplo implementa un método para devolver el nombre de la base de datos existente denominada cosmicworks
.
@Override
protected String getDatabaseName() {
return "cosmicworks";
}
Obtención de un contenedor
Use el decorador de método Container
para configurar una clase para representar elementos en un contenedor. Cree la clase para incluir todos los miembros que desea serializar en JSON. En este ejemplo, el tipo tiene un identificador único y campos para categoría, nombre, cantidad, precio y autorización.
@Container(containerName = "products", autoCreateContainer = false)
public class Item {
private String id;
private String name;
private Integer quantity;
private Boolean sale;
@PartitionKey
private String category;
// Extra members omitted for brevity
}
Crear un elemento
Cree un elemento en el contenedor mediante repository.save
.
Item item = new Item(
"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"gear-surf-surfboards",
"Yamba Surfboard",
12,
false
);
Item created_item = repository.save(item);
Lectura de un elemento
Se puede realizar una operación de lectura de punto mediante el identificador único (id
) y los campos de clave de partición. Use repository.findById
para recuperar de forma eficaz el elemento específico.
PartitionKey partitionKey = new PartitionKey("gear-surf-surfboards");
Optional<Item> existing_item = repository.findById("aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", partitionKey);
if (existing_item.isPresent()) {
// Do something
}
Elementos de consulta
Haga una consulta en varios elementos de un contenedor mediante la definición de una consulta en la interfaz del repositorio. En este ejemplo se usa el decorador de método Query
para definir un método que ejecute esta consulta con parámetros:
SELECT * FROM products p WHERE p.category = @category
@Repository
public interface ItemRepository extends CosmosRepository<Item, String> {
@Query("SELECT * FROM products p WHERE p.category = @category")
List<Item> getItemsByCategory(@Param("category") String category);
}
Capture todos los resultados de la consulta mediante repository.getItemsByCategory
. Recorra los resultados de la consulta.
List<Item> items = repository.getItemsByCategory("gear-surf-surfboards");
for (Item item : items) {
// Do something
}