我正在使用AWS ECS托管我的应用程序,并使用DynamoDB进行所有的数据库操作。因此,我将在不同的环境中使用相同的数据库名称但具有不同的表名称。例如,“dev_users”(用于Dev环境),“test_users”(用于Test环境)等。(这是我们公司使用相同的Dynamo账户用于不同环境的方式)
因此,我希望通过“AWS ECS任务定义”环境参数传递的环境变量来更改模型类的“tableName”。
例如:
我的模型类是:
@DynamoDBTable(tableName = "dev_users")
public class User {
现在当我在测试环境中部署容器时,我需要将“dev”替换为“test”。我知道我可以使用
@Value("${DOCKER_ENV:dev}")
访问环境变量可以使用。但是我不确定如何在类外部使用变量。有没有办法使用Docker环境变量来选择我的表前缀?
我的意图是这样使用:
我知道这样不可能。但还有其他方法或解决方法吗?
编辑1:
我正在使用Rahul的答案并遇到一些问题。在写出问题之前,我将解释我遵循的过程。
过程:
- 我在我的配置类(com.myapp.users.config)中创建了beans。
- 由于我没有repositories,我将我的Model类包名称作为“basePackage”路径。(请检查图片)
- 对于1),我已替换了“表名覆盖器bean注入”以避免错误。
- 对于2),我打印了传递到此方法的名称。但它为Null。因此,请检查所有可能的传递值的方式。
检查错误的图像:
我没有在用户模型类中更改任何内容,因为当执行bean时,beans将替换DynamoDBTable的名称。但是表名覆盖正在发生。数据仅从Model Class级别给出的表名中提取。
我在这里缺少什么?