如何使用@DynamoDbTable批注动态传递AWS 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;
    }

}

我的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());
    }

}
我的动态引擎服务中的

错误

构造函数DynamoDBMapper(DynamoDB,DynamoDBMapperConfig)未定义

我无法找出问题所在。如果我在类文件中使用表名,那么如果我尝试使用代码替换表名,则可以正常工作。

解决方法

(oldList,newList) -> {oldList.addAll(newList);return oldList;}需要AmazonDynamoDB的任何实现,而不是DynamoDB类。

DynamoDBMapper

您只需要在服务中注入DynamoDBMapper。

public DynamoDBMapper(
            final AmazonDynamoDB dynamoDB,final DynamoDBMapperConfig config) {

其他选项可能正在使用@Bean public DynamoDBMapper dynamoDBMapper(AmazonDynamoDB amazonDynamoDB) { DynamoDBMapperConfig config = new DynamoDBMapperConfig.Builder().withTableNameOverride(TableNameOverride.withTableNameReplacement(tableName)) .build(); return new DynamoDBMapper(amazonDynamoDB,config); } 类,但在那里您无法使用com.amazonaws.services.dynamodbv2.document.DynamoDB,您需要重写代码。

DynamoDBScanExpression

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...