Add this skill
npx mdskills install sickn33/azure-cosmos-javaComprehensive SDK reference with clear code examples, but lacks agent-specific instructions
1---2name: azure-cosmos-java3description: |4 Azure Cosmos DB SDK for Java. NoSQL database operations with global distribution, multi-model support, and reactive patterns.5 Triggers: "CosmosClient java", "CosmosAsyncClient", "cosmos database java", "cosmosdb java", "document database java".6package: azure-cosmos7---89# Azure Cosmos DB SDK for Java1011Client library for Azure Cosmos DB NoSQL API with global distribution and reactive patterns.1213## Installation1415```xml16<dependency>17 <groupId>com.azure</groupId>18 <artifactId>azure-cosmos</artifactId>19 <version>LATEST</version>20</dependency>21```2223Or use Azure SDK BOM:2425```xml26<dependencyManagement>27 <dependencies>28 <dependency>29 <groupId>com.azure</groupId>30 <artifactId>azure-sdk-bom</artifactId>31 <version>{bom_version}</version>32 <type>pom</type>33 <scope>import</scope>34 </dependency>35 </dependencies>36</dependencyManagement>3738<dependencies>39 <dependency>40 <groupId>com.azure</groupId>41 <artifactId>azure-cosmos</artifactId>42 </dependency>43</dependencies>44```4546## Environment Variables4748```bash49COSMOS_ENDPOINT=https://<account>.documents.azure.com:443/50COSMOS_KEY=<your-primary-key>51```5253## Authentication5455### Key-based Authentication5657```java58import com.azure.cosmos.CosmosClient;59import com.azure.cosmos.CosmosClientBuilder;6061CosmosClient client = new CosmosClientBuilder()62 .endpoint(System.getenv("COSMOS_ENDPOINT"))63 .key(System.getenv("COSMOS_KEY"))64 .buildClient();65```6667### Async Client6869```java70import com.azure.cosmos.CosmosAsyncClient;7172CosmosAsyncClient asyncClient = new CosmosClientBuilder()73 .endpoint(serviceEndpoint)74 .key(key)75 .buildAsyncClient();76```7778### With Customizations7980```java81import com.azure.cosmos.ConsistencyLevel;82import java.util.Arrays;8384CosmosClient client = new CosmosClientBuilder()85 .endpoint(serviceEndpoint)86 .key(key)87 .directMode(directConnectionConfig, gatewayConnectionConfig)88 .consistencyLevel(ConsistencyLevel.SESSION)89 .connectionSharingAcrossClientsEnabled(true)90 .contentResponseOnWriteEnabled(true)91 .userAgentSuffix("my-application")92 .preferredRegions(Arrays.asList("West US", "East US"))93 .buildClient();94```9596## Client Hierarchy9798| Class | Purpose |99|-------|---------|100| `CosmosClient` / `CosmosAsyncClient` | Account-level operations |101| `CosmosDatabase` / `CosmosAsyncDatabase` | Database operations |102| `CosmosContainer` / `CosmosAsyncContainer` | Container/item operations |103104## Core Workflow105106### Create Database107108```java109// Sync110client.createDatabaseIfNotExists("myDatabase")111 .map(response -> client.getDatabase(response.getProperties().getId()));112113// Async with chaining114asyncClient.createDatabaseIfNotExists("myDatabase")115 .map(response -> asyncClient.getDatabase(response.getProperties().getId()))116 .subscribe(database -> System.out.println("Created: " + database.getId()));117```118119### Create Container120121```java122asyncClient.createDatabaseIfNotExists("myDatabase")123 .flatMap(dbResponse -> {124 String databaseId = dbResponse.getProperties().getId();125 return asyncClient.getDatabase(databaseId)126 .createContainerIfNotExists("myContainer", "/partitionKey")127 .map(containerResponse -> asyncClient.getDatabase(databaseId)128 .getContainer(containerResponse.getProperties().getId()));129 })130 .subscribe(container -> System.out.println("Container: " + container.getId()));131```132133### CRUD Operations134135```java136import com.azure.cosmos.models.PartitionKey;137138CosmosAsyncContainer container = asyncClient139 .getDatabase("myDatabase")140 .getContainer("myContainer");141142// Create143container.createItem(new User("1", "John Doe", "john@example.com"))144 .flatMap(response -> {145 System.out.println("Created: " + response.getItem());146 // Read147 return container.readItem(148 response.getItem().getId(),149 new PartitionKey(response.getItem().getId()),150 User.class);151 })152 .flatMap(response -> {153 System.out.println("Read: " + response.getItem());154 // Update155 User user = response.getItem();156 user.setEmail("john.doe@example.com");157 return container.replaceItem(158 user,159 user.getId(),160 new PartitionKey(user.getId()));161 })162 .flatMap(response -> {163 // Delete164 return container.deleteItem(165 response.getItem().getId(),166 new PartitionKey(response.getItem().getId()));167 })168 .block();169```170171### Query Documents172173```java174import com.azure.cosmos.models.CosmosQueryRequestOptions;175import com.azure.cosmos.util.CosmosPagedIterable;176177CosmosContainer container = client.getDatabase("myDatabase").getContainer("myContainer");178179String query = "SELECT * FROM c WHERE c.status = @status";180CosmosQueryRequestOptions options = new CosmosQueryRequestOptions();181182CosmosPagedIterable<User> results = container.queryItems(183 query,184 options,185 User.class186);187188results.forEach(user -> System.out.println("User: " + user.getName()));189```190191## Key Concepts192193### Partition Keys194195Choose a partition key with:196- High cardinality (many distinct values)197- Even distribution of data and requests198- Frequently used in queries199200### Consistency Levels201202| Level | Guarantee |203|-------|-----------|204| Strong | Linearizability |205| Bounded Staleness | Consistent prefix with bounded lag |206| Session | Consistent prefix within session |207| Consistent Prefix | Reads never see out-of-order writes |208| Eventual | No ordering guarantee |209210### Request Units (RUs)211212All operations consume RUs. Check response headers:213214```java215CosmosItemResponse<User> response = container.createItem(user);216System.out.println("RU charge: " + response.getRequestCharge());217```218219## Best Practices2202211. **Reuse CosmosClient** — Create once, reuse throughout application2222. **Use async client** for high-throughput scenarios2233. **Choose partition key carefully** — Affects performance and scalability2244. **Enable content response on write** for immediate access to created items2255. **Configure preferred regions** for geo-distributed applications2266. **Handle 429 errors** with retry policies (built-in by default)2277. **Use direct mode** for lowest latency in production228229## Error Handling230231```java232import com.azure.cosmos.CosmosException;233234try {235 container.createItem(item);236} catch (CosmosException e) {237 System.err.println("Status: " + e.getStatusCode());238 System.err.println("Message: " + e.getMessage());239 System.err.println("Request charge: " + e.getRequestCharge());240241 if (e.getStatusCode() == 409) {242 System.err.println("Item already exists");243 } else if (e.getStatusCode() == 429) {244 System.err.println("Rate limited, retry after: " + e.getRetryAfterDuration());245 }246}247```248249## Reference Links250251| Resource | URL |252|----------|-----|253| Maven Package | https://central.sonatype.com/artifact/com.azure/azure-cosmos |254| API Documentation | https://azuresdkdocs.z19.web.core.windows.net/java/azure-cosmos/latest/index.html |255| Product Docs | https://learn.microsoft.com/azure/cosmos-db/ |256| Samples | https://github.com/Azure-Samples/azure-cosmos-java-sql-api-samples |257| Performance Guide | https://learn.microsoft.com/azure/cosmos-db/performance-tips-java-sdk-v4-sql |258| Troubleshooting | https://learn.microsoft.com/azure/cosmos-db/troubleshoot-java-sdk-v4-sql |259
Full transparency — inspect the skill content before installing.