java - DynamoDB 和带前缀的 TableNameOverride

标签 java amazon-dynamodb

我正在测试 DynamoDB 表,并希望使用前缀“dev_”为开发环境设置不同的表名。

我做了这个测试来打印表名:

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig.TableNameOverride;  

TableNameOverride tbl = new TableNameOverride("test").withTableNamePrefix("dev_");
System.out.println("name=" + tbl.getTableName() + "  prefix=" + tbl.getTableNamePrefix());

这会打印:name=null prefix=dev_
这里的名字怎么为空?

TableNameOverride tbl = new TableNameOverride("test");//.withTableNamePrefix("dev_");
System.out.println("name=" + tbl.getTableName() + "  prefix=" + tbl.getTableNamePrefix());

这会打印:name=test prefix=null

*如何让表名成为“dev_test”?*

我想稍后使用它来为开发模式下的所有表获取“dev_”前缀,如下所示:

DynamoDBTable annotation = (DynamoDBTable) myclass.getClass().getAnnotation(DynamoDBTable.class);  
TableNameOverride tbl = new TableNameOverride(annotation.tableName()).withTableNamePrefix("dev_");

或者是否有其他解决方案来区分开发表和生产表?
我首先想到将它们放在不同的区域,但不确定。

也可以用这个:

mapper.save(ck, new DynamoDBMapperConfig(new TableNameOverride((isDev ? "dev_" : "") + annotation.tableName())));

最佳答案

withTableNamePrefix 是一个静态方法。所以这一行是用字符串“test”创建一个新的 TableNameOverride 实例,然后通过使用它调用静态 withTableNamePrefix 方法来丢弃该实例:

TableNameOverride tbl = new TableNameOverride("test").withTableNamePrefix("dev_");

为了回答将测试与生产分开这一更深层次的问题,我建议拥有 2 个完全独立的 AWS 账户,一个用于开发,一个用于生产。这是唯一的方法:

  • 单独查看帐单
  • 确保您从不在生产系统和测试系统之间泄漏数据
  • 在开发表上进行高扩展会阻止您将生产表扩展得更高

关于java - DynamoDB 和带前缀的 TableNameOverride,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888550/

相关文章:

reactjs - 通过 React useEffect Hook 更新状态时防止无限循环

java - 如何捕获 JAX-RS 中的两个查询参数?

java - 实现动态数组的更好方法

java - 如何将数据从bash脚本正确传递到java应用程序

java - 如何使用 Maven 和 Tycho 创建 Eclipse 插件版本?

react-native - GraphQL DynamoDB 架构中的默认主键?

java - Logback-test.xml 配置生成两个日志文件而不是一个?

mysql - 如何将 dynemodb 与 lumen 或 laravel 一起使用

javascript - 将 JSON 数据加载到 DynamoDB 本地时出错

python - 动态模块 : query using more than two attributes