我的 Kotlin Spring Boot 应用程序正在使用 DynamoDB 增强客户端来保存记录 - 该对象有一个
createdAt
和 updatedAt
字段,我试图让 DynamoDB 在创建/修改记录时自动进行适当设置,通过使用 @get:DynamoDbAutoGeneratedTimestampAttribute
注释两个时间戳字段。
虽然这些字段确实在创建时设置,但当触发记录更新时,永远不会修改
updatedAt
字段以反映最新时间戳,因为它应该具有设置为 WRITE_ALWAYS
的更新行为。我在这里缺少什么?
@DynamoDbBean
data class Record(
@get:DynamoDbPartitionKey
var uuid: String = UUID.randomUUID().toString(),
@get:DynamoDbUpdateBehavior(UpdateBehavior.WRITE_IF_NOT_EXISTS)
@get:DynamoDbAutoGeneratedTimestampAttribute
var createdAt: Instant? = null,
@get:DynamoDbUpdateBehavior(UpdateBehavior.WRITE_ALWAYS)
@get:DynamoDbAutoGeneratedTimestampAttribute
var updatedAt: Instant? = createdAt
)
@Bean
fun dynamoDbEnhancedClient(): DynamoDbEnhancedClient =
DynamoDbEnhancedClient.builder()
.dynamoDbClient(dynamoDbClient())
.extensions(AutoGeneratedTimestampRecordExtension.create())
.build()
所以,至少对于Java来说,在创建DynamoDbEnhancedClient时需要设置扩展。查看 https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/ddb-en-client-extensions.html
例如
DynamoDbEnhancedClient.builder()
.dynamoDbClient(setupDynamoClient())
.extensions(
AutoGeneratedTimestampRecordExtension.create(),
VersionedRecordExtension.builder().build()
)
.build();