Я использую библиотеку 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
.