gpt4 book ai didi

java - 使用环境变量 spring boot 在 dynamo db 中动态设置全局二级索引名称

转载 作者:行者123 更新时间:2023-12-01 13:02:05 24 4
gpt4 key购买 nike

我正在使用 derjust/spring-data-dynamodb与 DynamoDB 交互的库。我已经定义了一个类 Product 如下:

@DynamoDBTable(tableName = "product")
public class Product {

@Id
@NotNull
@DynamoDBHashKey
private String productId;

@DynamoDBIndexHashKey(globalSecondaryIndexName = "product-category-gsi")
private String categoryId;

private double amount;

// more fields, getters and setters
}

我想在多个环境中使用相同的代码 - dev, staging, prod .因此,表名将是 dev-product, staging-product and prod-product .

该环境可用作应用程序属性。我已经使用这里提到的步骤配置了表名: https://github.com/derjust/spring-data-dynamodb/wiki/Alter-table-name-during-runtime
@Configuration
@EnableDynamoDBRepositories(basePackages = "com.example.entity",dynamoDBMapperConfigRef = "dynamoDBMapperConfig")
public class DynamoDBConfiguration {

@Value("${aws.region}")
private String awsRegion;

@Value("${env.name}")
private String envName;

@Bean
public AmazonDynamoDB amazonDynamoDB() {
return AmazonDynamoDBClientBuilder.standard()
.withRegion(awsRegion)
.build();
}

@Bean
public DynamoDBMapperConfig.TableNameOverride tableNameOverrider() {
return DynamoDBMapperConfig.TableNameOverride.withTableNameReplacement(envName + "-product");
}

@Bean
public DynamoDBMapperConfig dynamoDBMapperConfig() {
DynamoDBMapperConfig.Builder builder = new DynamoDBMapperConfig.Builder();
builder.setTableNameOverride(tableNameOverrider());
return new DynamoDBMapperConfig(DynamoDBMapperConfig.DEFAULT, builder.build());
}
}

但是如何覆盖全局二级索引名称?目前,我已将其硬编码为“ product-category-gsi”。

我希望能够动态设置它,就像我将表名设置为 dev-product-category-gsi, staging-product-category-gsi and prod-product-category-gsi 一样.

最佳答案

您可以为 globalSecondaryIndexName 创建一个常量带有环境名称,

public class DynamoDBConstants {
public static final String GLOBAL_SECONDARY_INDEXNAME = System.getProperty("env.name")+"product-category-gsi";
}

并按如下方式使用它,
@DynamoDBIndexHashKey(globalSecondaryIndexName = DynamoDBConstants.GLOBAL_SECONDARY_INDEXNAME)
private String categoryId;

关于java - 使用环境变量 spring boot 在 dynamo db 中动态设置全局二级索引名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60808538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com