Class AtomicCounterExtension

java.lang.Object
software.amazon.awssdk.enhanced.dynamodb.extensions.AtomicCounterExtension
All Implemented Interfaces:
DynamoDbEnhancedClientExtension

public final class AtomicCounterExtension extends Object implements DynamoDbEnhancedClientExtension
This extension enables atomic counter attributes to be changed in DynamoDb by creating instructions for modifying an existing value or setting a start value. The extension is loaded by default when you instantiate a DynamoDbEnhancedClient and only needs to be added to the client if you are adding custom extensions to the client.

To utilize atomic counters, first create a field in your model that will be used to store the counter. This class field should of type Long and you need to tag it as an atomic counter:

Every time a new update of the record is successfully written to the database, the counter will be updated automatically. By default, the counter starts at 0 and increments by 1 for each update. The tags provide the capability of adjusting the counter start and increment/decrement values such as described in DynamoDbAtomicCounter.

Example 1: Using a bean based table schema

 
 @DynamoDbBean
 public class CounterRecord {
     @DynamoDbAtomicCounter(delta = 5, startValue = 10)
     public Long getCustomCounter() {
         return customCounter;
     }
 }
 
 

Example 2: Using a static table schema

 
     private static final StaticTableSchema<AtomicCounterItem> ITEM_MAPPER =
         StaticTableSchema.builder(AtomicCounterItem.class)
                          .newItemSupplier(AtomicCounterItem::new)
                          .addAttribute(Long.class, a -> a.name("defaultCounter")
                                                          .getter(AtomicCounterItem::getDefaultCounter)
                                                          .setter(AtomicCounterItem::setDefaultCounter)
                                                          .addTag(StaticAttributeTags.atomicCounter()))
                          .build();
 
 

NOTES:

  • When using putItem, the counter will be reset to its start value.
  • The extension will remove any existing occurrences of the atomic counter attributes from the record during an updateItem operation. Manually editing attributes marked as atomic counters will have NO EFFECT.