Moh*_*vel 2 java amazon-dynamodb spring-boot aws-java-sdk-2.x aws-java-sdk-dynamodb
我创建了一个 java 服务来从 dynamodb 获取详细信息,它工作正常,但我的挑战是我将表名硬编码到类文件@DynamoDbTable注释中,以便在不同的环境中工作,我觉得这不是正确的方法。我在下面给出了我的代码,有人可以帮助我解决这个问题。
代码示例
public class DynamodbService {
private DynamoDB client;
private DynamoDBMapper objectMapper;
/**
*
* @param client
* @param objectMapper
*/
@Autowired
public DynamodbService(DynamoDB client, DynamoDBMapper objectMapper) {
this.client = client;
this.objectMapper = objectMapper;
}
public List<Dynamodb> findAll() throws Exception {
DynamoDBMapperConfig mapperConfig = new DynamoDBMapperConfig.Builder()
.withTableNameOverride(DynamoDBMapperConfig.TableNameOverride.withTableNameReplacement(""))
.build();
DynamoDBMapper mapper = new DynamoDBMapper(client, mapperConfig);
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
List<Dynamodb> scanResult = objectMapper.scan(Dynamodb.class, scanExpression);
return scanResult;
}
}
Run Code Online (Sandbox Code Playgroud)
我的 DynamoDB 配置
@Configuration
public class DynamoDBconfig {
/**
*
*/
@Value("${amazon.dynamodb.accesskey}")
private String awsAccessKey;
/**
*
*/
@Value("${amazon.dynamodb.secretkey}")
private String awsSecretKey;
@Bean
public AWSCredentials amazonAWSCredentials() {
return new BasicAWSCredentials(aes.getDecryptedvalue(awsAccessKey), aes.getDecryptedvalue(awsSecretKey));
}
/**
*
* @return
*/
@Bean
public DynamoDBMapperConfig dynamoDBMapperConfig() {
return DynamoDBMapperConfig.DEFAULT;
}
/**
*
* @param amazonDynamoDB
* @param config
* @return
*/
@Bean
public DynamoDBMapper dynamoDBMapper(AmazonDynamoDB amazonDynamoDB, DynamoDBMapperConfig config) {
return new DynamoDBMapper(amazonDynamoDB, config);
}
/**
*
* @return
*/
@Bean
public AmazonDynamoDB amazonDynamoDB() {
return AmazonDynamoDBClientBuilder.standard().withCredentials(amazonAWSCredentialsProvider())
.withRegion(Regions.US_EAST_2).build();
}
/**
*
* @return
*/
@Bean
public DynamoDB dynamoDB() {
return new DynamoDB(amazonDynamoDB());
}
/**
*
* @return
*/
public AWSCredentialsProvider amazonAWSCredentialsProvider() {
return new AWSStaticCredentialsProvider(amazonAWSCredentials());
}
}
Run Code Online (Sandbox Code Playgroud)
我的 dynamodb 服务出现错误
构造函数 DynamoDBMapper(DynamoDB, DynamoDBMapperConfig) 未定义
我无法找出问题所在。如果我在类文件中使用表名,则工作正常,如果我尝试使用代码替换表名,则会出现错误。
DynamoDBMapper需要 AmazonDynamoDB 的任何实现,但不需要 DynamoDB 类。
public DynamoDBMapper(
final AmazonDynamoDB dynamoDB,
final DynamoDBMapperConfig config) {
Run Code Online (Sandbox Code Playgroud)
您只需在服务中注入 DynamoDBMapper。
@Bean
public DynamoDBMapper dynamoDBMapper(AmazonDynamoDB amazonDynamoDB) {
DynamoDBMapperConfig config = new DynamoDBMapperConfig.Builder().withTableNameOverride(TableNameOverride.withTableNameReplacement(tableName))
.build();
return new DynamoDBMapper(amazonDynamoDB, config);
}
Run Code Online (Sandbox Code Playgroud)
其他选项可能是使用 com.amazonaws.services.dynamodbv2.document.DynamoDB类,但您无法使用类DynamoDBScanExpression,并且需要重写代码。
String desiredTabledName = "table-name";
Table table = dynamoDB.getTable(desiredTabledName);
You have multiple options.
- table.scan() and table query.
- Index index = table.getIndex(indexName);
index.scan() or index.query()
- You could pass `QuerySpec` and `ScanSpec` to all above.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7553 次 |
| 最近记录: |