Kir*_*ran 10 java spring amazon-dynamodb spring-boot
我使用 AWS ECS 来托管我的应用程序并使用 DynamoDB 进行所有数据库操作。因此,对于不同的环境,我将拥有具有不同表名的相同数据库。比如“dev_users”(用于Dev env)、“test_users”(用于Test env)等。(这是我们公司在不同环境下使用同一个Dynamo账户的方式)
所以我想使用通过“AWS ECS 任务定义”环境参数传递的环境变量来更改模型类的“tableName”。
例如。
我的模型类是:
@DynamoDBTable(tableName = "dev_users")
public class User {
Run Code Online (Sandbox Code Playgroud)
现在,当我在测试环境中部署容器时,需要将“dev”替换为“test”。我知道我可以使用
@Value("${DOCKER_ENV:dev}")
Run Code Online (Sandbox Code Playgroud)
访问环境变量。但我不确定如何在课堂外使用变量。有什么方法可以使用 docker env 变量来选择我的表前缀?
我的意图是这样使用:
我知道这是不可能的。但是有没有其他方法或解决方法?
编辑1:
我正在研究 Rahul 的答案并面临一些问题。在写问题之前,我将解释我遵循的过程。
过程:
检查图像是否有错误:
我没有更改我的用户模型类中的任何内容,因为当 bean 被执行时 bean 将替换 DynamoDBTable 的名称。但是表名正在发生。数据仅从模型类级别给出的表名中提取。
我在这里缺少什么?
可以通过更改的 DynamoDBMapperConfig bean 更改表名称。
对于您必须用文字为每个表添加前缀的情况,您可以这样添加 bean。在您的情况下,这里的前缀可以是环境名称。
@Bean
public TableNameOverride tableNameOverrider() {
String prefix = ... // Use @Value to inject values via Spring or use any logic to define the table prefix
return TableNameOverride.withTableNamePrefix(prefix);
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请查看此处的完整详细信息:https : //github.com/derjust/spring-data-dynamodb/wiki/Alter-table-name-during-runtime
归档时间: |
|
查看次数: |
7590 次 |
最近记录: |