Azure Cosmos DB SDK for Java Client library for Azure Cosmos DB NoSQL API with global distribution and reactive patterns. Installation < dependency
< groupId
com.azure </ groupId
< artifactId
azure-cosmos </ artifactId
< version
LATEST </ version
</ dependency
Or use Azure SDK BOM: < dependencyManagement
< dependencies
< dependency
< groupId
com.azure </ groupId
< artifactId
azure-sdk-bom </ artifactId
< version
{bom_version} </ version
< type
pom </ type
< scope
import </ scope
</ dependency
</ dependencies
</ dependencyManagement
< dependencies
< dependency
< groupId
com.azure </ groupId
< artifactId
azure-cosmos </ artifactId
</ dependency
</ dependencies
Environment Variables COSMOS_ENDPOINT = https:// < account
.documents.azure.com:443/ COSMOS_KEY = < your-primary-key
Authentication Key-based Authentication import com . azure . cosmos . CosmosClient ; import com . azure . cosmos . CosmosClientBuilder ; CosmosClient client = new CosmosClientBuilder ( ) . endpoint ( System . getenv ( "COSMOS_ENDPOINT" ) ) . key ( System . getenv ( "COSMOS_KEY" ) ) . buildClient ( ) ; Async Client import com . azure . cosmos . CosmosAsyncClient ; CosmosAsyncClient asyncClient = new CosmosClientBuilder ( ) . endpoint ( serviceEndpoint ) . key ( key ) . buildAsyncClient ( ) ; With Customizations import com . azure . cosmos . ConsistencyLevel ; import java . util . Arrays ; CosmosClient client = new CosmosClientBuilder ( ) . endpoint ( serviceEndpoint ) . key ( key ) . directMode ( directConnectionConfig , gatewayConnectionConfig ) . consistencyLevel ( ConsistencyLevel . SESSION ) . connectionSharingAcrossClientsEnabled ( true ) . contentResponseOnWriteEnabled ( true ) . userAgentSuffix ( "my-application" ) . preferredRegions ( Arrays . asList ( "West US" , "East US" ) ) . buildClient ( ) ; Client Hierarchy Class Purpose CosmosClient / CosmosAsyncClient Account-level operations CosmosDatabase / CosmosAsyncDatabase Database operations CosmosContainer / CosmosAsyncContainer Container/item operations Core Workflow Create Database // Sync client . createDatabaseIfNotExists ( "myDatabase" ) . map ( response -> client . getDatabase ( response . getProperties ( ) . getId ( ) ) ) ; // Async with chaining asyncClient . createDatabaseIfNotExists ( "myDatabase" ) . map ( response -> asyncClient . getDatabase ( response . getProperties ( ) . getId ( ) ) ) . subscribe ( database -> System . out . println ( "Created: " + database . getId ( ) ) ) ; Create Container asyncClient . createDatabaseIfNotExists ( "myDatabase" ) . flatMap ( dbResponse -> { String databaseId = dbResponse . getProperties ( ) . getId ( ) ; return asyncClient . getDatabase ( databaseId ) . createContainerIfNotExists ( "myContainer" , "/partitionKey" ) . map ( containerResponse -> asyncClient . getDatabase ( databaseId ) . getContainer ( containerResponse . getProperties ( ) . getId ( ) ) ) ; } ) . subscribe ( container -> System . out . println ( "Container: " + container . getId ( ) ) ) ; CRUD Operations import com . azure . cosmos . models . PartitionKey ; CosmosAsyncContainer container = asyncClient . getDatabase ( "myDatabase" ) . getContainer ( "myContainer" ) ; // Create container . createItem ( new User ( "1" , "John Doe" , "john@example.com" ) ) . flatMap ( response -> { System . out . println ( "Created: " + response . getItem ( ) ) ; // Read return container . readItem ( response . getItem ( ) . getId ( ) , new PartitionKey ( response . getItem ( ) . getId ( ) ) , User . class ) ; } ) . flatMap ( response -> { System . out . println ( "Read: " + response . getItem ( ) ) ; // Update User user = response . getItem ( ) ; user . setEmail ( "john.doe@example.com" ) ; return container . replaceItem ( user , user . getId ( ) , new PartitionKey ( user . getId ( ) ) ) ; } ) . flatMap ( response -> { // Delete return container . deleteItem ( response . getItem ( ) . getId ( ) , new PartitionKey ( response . getItem ( ) . getId ( ) ) ) ; } ) . block ( ) ; Query Documents import com . azure . cosmos . models . CosmosQueryRequestOptions ; import com . azure . cosmos . util . CosmosPagedIterable ; CosmosContainer container = client . getDatabase ( "myDatabase" ) . getContainer ( "myContainer" ) ; String query = "SELECT * FROM c WHERE c.status = @status" ; CosmosQueryRequestOptions options = new CosmosQueryRequestOptions ( ) ; CosmosPagedIterable < User
results
container . queryItems ( query , options , User . class ) ; results . forEach ( user -> System . out . println ( "User: " + user . getName ( ) ) ) ; Key Concepts Partition Keys Choose a partition key with: High cardinality (many distinct values) Even distribution of data and requests Frequently used in queries Consistency Levels Level Guarantee Strong Linearizability Bounded Staleness Consistent prefix with bounded lag Session Consistent prefix within session Consistent Prefix Reads never see out-of-order writes Eventual No ordering guarantee Request Units (RUs) All operations consume RUs. Check response headers: CosmosItemResponse < User
response
container . createItem ( user ) ; System . out . println ( "RU charge: " + response . getRequestCharge ( ) ) ; Best Practices Reuse CosmosClient — Create once, reuse throughout application Use async client for high-throughput scenarios Choose partition key carefully — Affects performance and scalability Enable content response on write for immediate access to created items Configure preferred regions for geo-distributed applications Handle 429 errors with retry policies (built-in by default) Use direct mode for lowest latency in production Error Handling import com . azure . cosmos . CosmosException ; try { container . createItem ( item ) ; } catch ( CosmosException e ) { System . err . println ( "Status: " + e . getStatusCode ( ) ) ; System . err . println ( "Message: " + e . getMessage ( ) ) ; System . err . println ( "Request charge: " + e . getRequestCharge ( ) ) ; if ( e . getStatusCode ( ) == 409 ) { System . err . println ( "Item already exists" ) ; } else if ( e . getStatusCode ( ) == 429 ) { System . err . println ( "Rate limited, retry after: " + e . getRetryAfterDuration ( ) ) ; } } Reference Links Resource URL Maven Package https://central.sonatype.com/artifact/com.azure/azure-cosmos API Documentation https://azuresdkdocs.z19.web.core.windows.net/java/azure-cosmos/latest/index.html Product Docs https://learn.microsoft.com/azure/cosmos-db/ Samples https://github.com/Azure-Samples/azure-cosmos-java-sql-api-samples Performance Guide https://learn.microsoft.com/azure/cosmos-db/performance-tips-java-sdk-v4-sql Troubleshooting https://learn.microsoft.com/azure/cosmos-db/troubleshoot-java-sdk-v4-sql When to Use This skill is applicable to execute the workflow or actions described in the overview.