diff --git a/src/main/java/com/azure/cosmos/examples/common/SimpleFamilyMemberPOJO.java b/src/main/java/com/azure/cosmos/examples/common/SimpleFamilyMemberPOJO.java new file mode 100644 index 0000000..f5b086d --- /dev/null +++ b/src/main/java/com/azure/cosmos/examples/common/SimpleFamilyMemberPOJO.java @@ -0,0 +1,31 @@ +package com.azure.cosmos.examples.common; + +public class SimpleFamilyMemberPOJO { + private String lastName; + private String id; + private Integer ttl; + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getLastName() { + return lastName; + } + + public void setId(String id) { + this.id = id; + } + + public String getId() { + return id; + } + + public void setTtl(Integer ttl) { + this.ttl = ttl; + } + + public Integer getTtl() { + return ttl; + } +} diff --git a/src/main/java/com/azure/cosmos/examples/ttl/sync/SampleTTLQuickstart.java b/src/main/java/com/azure/cosmos/examples/ttl/sync/SampleTTLQuickstart.java new file mode 100644 index 0000000..7a59fa9 --- /dev/null +++ b/src/main/java/com/azure/cosmos/examples/ttl/sync/SampleTTLQuickstart.java @@ -0,0 +1,249 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.cosmos.examples.ttl.sync; + +import com.azure.cosmos.ConnectionPolicy; +import com.azure.cosmos.ConsistencyLevel; +import com.azure.cosmos.CosmosClient; +import com.azure.cosmos.CosmosClientBuilder; +import com.azure.cosmos.CosmosClientException; +import com.azure.cosmos.CosmosContainer; +import com.azure.cosmos.CosmosDatabase; +import com.azure.cosmos.CosmosPagedIterable; +import com.azure.cosmos.examples.changefeed.SampleChangeFeedProcessor; +import com.azure.cosmos.examples.common.AccountSettings; +import com.azure.cosmos.examples.common.CustomPOJO; +import com.azure.cosmos.examples.common.Families; +import com.azure.cosmos.examples.common.Family; +import com.azure.cosmos.examples.common.SimpleFamilyMemberPOJO; +import com.azure.cosmos.models.CosmosContainerProperties; +import com.azure.cosmos.models.CosmosItemRequestOptions; +import com.azure.cosmos.models.CosmosItemResponse; +import com.azure.cosmos.models.FeedOptions; +import com.azure.cosmos.models.PartitionKey; +import com.google.common.collect.Lists; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +public class SampleTTLQuickstart { + + private CosmosClient client; + + private final String databaseName = "AzureSampleFamilyDB"; + private final String containerName = "FamilyContainer"; + + private CosmosDatabase database; + private CosmosContainer container; + + protected static Logger logger = LoggerFactory.getLogger(SampleChangeFeedProcessor.class.getSimpleName()); + + public void close() { + client.close(); + } + + /** + * Run a Hello CosmosDB console application. + *
+ * This is a simple sample application intended to demonstrate Create, Read, Update, Delete (CRUD) operations
+ * with Azure Cosmos DB Java SDK, as applied to databases, containers and items. This sample will
+ * 1. Create synchronous client, database and container instances
+ * 2. Create several items
+ * 3. Upsert one of the items
+ * 4. Perform a query over the items
+ * 5. Delete an item
+ * 6. Delete the Cosmos DB database and container resources and close the client. *
+ */
+ public static void main(String[] args) {
+ SampleTTLQuickstart p = new SampleTTLQuickstart();
+
+ try {
+ logger.info("Starting SYNC main");
+ p.getStartedDemo();
+ logger.info("Demo complete, please hold while resources are released");
+ } catch (Exception e) {
+ e.printStackTrace();
+ logger.error(String.format("Cosmos getStarted failed with %s", e));
+ } finally {
+ logger.info("Closing the client");
+ p.shutdown();
+ }
+ }
+
+
+ private void getStartedDemo() throws Exception {
+
+ logger.info("Using Azure Cosmos DB endpoint: " + AccountSettings.HOST);
+
+ ConnectionPolicy defaultPolicy = ConnectionPolicy.getDefaultPolicy();
+ // Setting the preferred location to Cosmos DB Account region
+ // West US is just an example. User should set preferred location to the Cosmos DB region closest to the application
+ defaultPolicy.setPreferredLocations(Lists.newArrayList("West US"));
+
+ // Create sync client
+ client = new CosmosClientBuilder()
+ .setEndpoint(AccountSettings.HOST)
+ .setKey(AccountSettings.MASTER_KEY)
+ .setConnectionPolicy(defaultPolicy)
+ .setConsistencyLevel(ConsistencyLevel.EVENTUAL)
+ .buildClient();
+
+
+ createDatabaseIfNotExists();
+ createContainerIfNotExists();
+
+ // Enable TTL for items in a container but do not set a default TTL
+ CosmosContainerProperties containerProperties = new CosmosContainerProperties(containerName, "/lastName");
+ containerProperties.setDefaultTimeToLiveInSeconds(-1);
+ container.replace(containerProperties);
+
+ // Enable TTL for items in a container and set a default TTL
+ containerProperties.setDefaultTimeToLiveInSeconds(90 * 60 * 60 * 24);
+ container.replace(containerProperties);
+
+ // Set item TTL as a POJO field
+ SimpleFamilyMemberPOJO famPOJO = new SimpleFamilyMemberPOJO();
+ famPOJO.setLastName("Andrews");
+ famPOJO.setId(UUID.randomUUID().toString());
+ famPOJO.setTtl(5); //5 sec TTL
+ container.createItem(famPOJO, new PartitionKey(famPOJO.getLastName()), new CosmosItemRequestOptions());
+
+ // Reset time-to-live - TTL value stays the same, this just resets the timer (reset _ts)
+ CosmosItemResponse