Guu*_*uus 8 java amazon-dynamodb
我正在测试DynamoDB表,并希望使用前缀"dev_"进行开发,为prod和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());
Run Code Online (Sandbox Code Playgroud)
这打印:name=null prefix=dev_
这里的名字为何如此?
TableNameOverride tbl = new TableNameOverride("test");//.withTableNamePrefix("dev_");
System.out.println("name=" + tbl.getTableName() + " prefix=" + tbl.getTableNamePrefix());
Run Code Online (Sandbox Code Playgroud)
这打印: name=test prefix=null
*如何将表名称设为"dev_test"?*
我想稍后使用它来为开发模式中的所有表获取"dev_"前缀,如下所示:
DynamoDBTable annotation = (DynamoDBTable) myclass.getClass().getAnnotation(DynamoDBTable.class);
TableNameOverride tbl = new TableNameOverride(annotation.tableName()).withTableNamePrefix("dev_");
Run Code Online (Sandbox Code Playgroud)
或者是否有另一种解决方案来区分开发和生产表?
我首先想到将它们放在不同的区域但不确定.
也可以用这个:
mapper.save(ck, new DynamoDBMapperConfig(new TableNameOverride((isDev ? "dev_" : "") + annotation.tableName())));
Run Code Online (Sandbox Code Playgroud)
withTableNamePrefix是一种静态方法.所以这一行是TableNameOverride使用String"test" 创建一个新实例,然后通过使用它来调用静态withTableNamePrefix方法抛出该实例:
TableNameOverride tbl = new TableNameOverride("test").withTableNamePrefix("dev_");
Run Code Online (Sandbox Code Playgroud)
为了回答将测试与产品分离的更深层次的问题,我建议完全使用2个独立的AWS账户,一个用于开发,一个用于产品.这是唯一的方法:
我遇到了同样的情况,并且花了几天时间才与自己斗争.
万一你在使用DynamoDB + Spring,这对我有用:
POJO课程:
@DynamoDBTable(tableName = "APP-ACCESSKEY")
public class AccessKey {
@NotBlank
@Size(min = 1, max = 36)
private String accessToken;
@NotNull
@Size(min = 3, max = 15)
private String userName;
private Date dateInsertion;
public AccessKey() {
// ... All POJO stuff
}
Run Code Online (Sandbox Code Playgroud)
弹簧配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!-- Amazon Credentials -->
<bean id="tableNameOverride" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="staticMethod" value="com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig.TableNameOverride.withTableNamePrefix"/>
<property name="arguments" value="DES-" />
</bean>
<bean id="dynamoDBMapperConfig" class="com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig">
<constructor-arg index="0" ref="tableNameOverride" />
</bean>
<bean id="BasicAWSCredentials" class="com.amazonaws.auth.BasicAWSCredentials">
<constructor-arg index="0" value="${amazon.accessKey}" />
<constructor-arg index="1" value="${amazon.secretKey}" />
</bean>
<bean id="amazonDynamoDBClient" class="com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient">
<constructor-arg index="0" ref="BasicAWSCredentials" />
<property name="endpoint" value="http://dynamodb.us-west-2.amazonaws.com" />
</bean>
<bean id="dynamoDBMapper" class="com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper">
<constructor-arg index="0" ref="amazonDynamoDBClient" />
<constructor-arg index="1" ref="dynamoDBMapperConfig" />
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
说明:
考虑到我的AccessKey对象指向AWS DynamodDB上的APP-ACCESSKEY表,结果发现在运行此之后,您的应用程序将开始指向DES-APP-ACCESSKEY.
希望它可以帮助那些面临类似情况的人
干杯
| 归档时间: |
|
| 查看次数: |
8071 次 |
| 最近记录: |