设置DynamoDB表名称时出现问题,来自application.properties文件

huangapple go评论87阅读模式
英文:

Problems setting DynamoDB table name from application.properties file

问题

  1. // 我在StackOverflow的某处看到一个回复,可以像这样动态设置表名:
  2. @DynamoDBTable(tableName = "${dynamodb.mentions}")
  3. data class MentionItem (
  4. @DynamoDBHashKey(attributeName = "mentioned_user")
  5. var mentionedUserId: String = "",
  6. @DynamoDBRangeKey(attributeName = "message_id")
  7. var messageId: String = "",
  8. @DynamoDBAttribute(attributeName = "mentioned_tag")
  9. var mentionedTag: String? = null
  10. )
  1. // 需要补充的是,当我尝试在另一个类中像这样访问表名时,Spring会从我的属性文件中获取值:
  2. @Value("${dynamodb.mentions}")
  3. lateinit var mentionsTableName: String

Spring会从属性文件中获取值,但从DynamoDBTable注释中不起作用。

是否有办法从application.properties文件中设置表名

英文:

I have seen a reply somewhere on StackOverflow that you can set a table name dynamically like this:

  1. @DynamoDBTable(tableName = "${dynamodb.mentions}")
  2. data class MentionItem (
  3. @DynamoDBHashKey(attributeName = "mentioned_user")
  4. var mentionedUserId: String = "",
  5. @DynamoDBRangeKey(attributeName = "message_id")
  6. var messageId: String = "",
  7. @DynamoDBAttribute(attributeName = "mentioned_tag")
  8. var mentionedTag: String? = null
  9. )

Need to add that when I tried to access table name in another class like this, spring picks up the value from my properties file:

  1. @Value("${dynamodb.mentions}")
  2. lateinit var mentionsTableName: String

Spring picks up the value from the properties file, but the same doesn't work from the DynamoDBTable annotation.

Is there a way to set a table name from the application.properties file

答案1

得分: 1

到目前为止,我只找到了这种方法来实现它,那就是使用mapperConfig:

  1. DynamoDBMapperConfig.Builder().withTableNameOverride(TableNameOverride.withTableNameReplacement(yourTableName)).build()

在我进行DynamoDB发布的服务中:

  1. @Service
  2. class MessageService() {
  3. @Value("${dynamodb.mentions}")
  4. lateinit var mentionsTableName: String
  5. fun postMentions(messageId: String, mentionedEmployeeId: String, mentionedTag: String) {
  6. val mapper = DynamoDBMapper(dynamoConfiguration.amazonDynamoDB())
  7. val mapperConfig =
  8. DynamoDBMapperConfig.Builder().withTableNameOverride(TableNameOverride.withTableNameReplacement(mentionsTableName))
  9. .build()
  10. mapper.save(
  11. MentionDevItem(
  12. mentionedUserId = it.mentionedEmployeeId,
  13. messageId = messageId,
  14. mentionedTag = it.mentionedTag,
  15. ),
  16. mapperConfig,
  17. )
  18. }
  19. }
英文:

So far I have only found this way to do it and it is to use mapperConfig:

  1. DynamoDBMapperConfig.Builder().withTableNameOverride(TableNameOverride.withTableNameReplacement(yourTableName)).build()

In the service where I do the post to Dynamo:

  1. @Service
  2. class MessageService() {
  3. @Value("${dynamodb.mentions}")
  4. lateinit var mentionsTableName: String
  5. fun postMentions(messageId: String, mentionedEmployeeId: String, mentionedTag: String) {
  6. val mapper = DynamoDBMapper(dynamoConfiguration.amazonDynamoDB())
  7. val mapperConfig =
  8. DynamoDBMapperConfig.Builder().withTableNameOverride(TableNameOverride.withTableNameReplacement(mentionsTableName))
  9. .build()
  10. mapper.save(
  11. MentionDevItem(
  12. mentionedUserId = it.mentionedEmployeeId,
  13. messageId = messageId,
  14. mentionedTag = it.mentionedTag,
  15. ),
  16. mapperConfig,
  17. )
  18. }
  19. }

huangapple
  • 本文由 发表于 2023年3月7日 17:04:12
  • 转载请务必保留本文链接:https://go.coder-hub.com/75659877.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定