derjust / spring-data-dynamodb

This module deals with enhanced support for a data access layer built on AWS DynamoDB.
https://derjust.github.io/spring-data-dynamodb/
Apache License 2.0
402 stars 141 forks source link

It is not possible to alter the table at run time #195

Open jledesma84 opened 6 years ago

jledesma84 commented 6 years ago

I need to store in different tables, depending on the useful load received by the REST layer. I followed the guide of the Wiki, but I can not pass the value of the name of the table, from the impl class to the Config class

AppConfig.java

package com.bcol.vtd.config;

@Configuration @EnableDynamoDBRepositories(dynamoDBMapperConfigRef = "dynamoDBMapperConfig", basePackages = "com.bcol.vtd.repository") public class AppConfig {

@Value("${amazon.dynamodb.endpoint}") private String amazonDynamoDBEndpoint;

@Value("${amazon.aws.accesskey}") private String amazonAWSAccessKey;

@Value("${amazon.aws.secretkey}") private String amazonAWSSecretKey;

@Bean(value = "dynamoDBMapperConfig") public DynamoDBMapperConfig dynamoDBMapperConfig(TableNameOverride tableNameOverrider) { // Create empty DynamoDBMapperConfig builder DynamoDBMapperConfig.Builder builder = new DynamoDBMapperConfig.Builder(); // Inject the table name overrider bean builder.setTableNameOverride(new TableNameOverride(tableNameOverrider.getTableName())); return new DynamoDBMapperConfig(DynamoDBMapperConfig.DEFAULT, builder.build()); }

@Bean public AmazonDynamoDB amazonDynamoDB() { AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient(amazonAWSCredentials()); amazonDynamoDB.setRegion(Region.US_Standard.toAWSRegion()); return amazonDynamoDB; }

@Bean public AWSCredentials amazonAWSCredentials() { return new BasicAWSCredentials(amazonAWSAccessKey, amazonAWSSecretKey); }

@Bean DynamoDB dynamoDB() { return new DynamoDB(amazonDynamoDB()); }

@Bean public TableNameOverride tableNameOverrider() { return TableNameOverride.withTableNameReplacement("VtdLI"); //How do I send the value? }

}

VtdBaseImp.java

package com.bcol.vtd.service.impl;

@Service public class VtdBaseImpl implements VtdBaseService{

@Autowired VtdBaseRepository vtdBaseRepository;

@Override public VtdBase findByIdSesion(String idSesion) { return vtdBaseRepository.findByIdSesion(idSesion); }

@Override public void saveVtdBase(VtdBaseRequest request) { VtdBase vtdBase = new VtdBase(); vtdBase.setIdSesion(request.getIdSesion()); vtdBase.setTimestampTransaccion(request.getTimestampTransaccion()); vtdBase.setCanal(request.getCanal()); vtdBase.setIdAplicacion(request.getIdAplicacion()); vtdBase.setDispositivo(request.getDispositivo()); vtdBase.setInfoTransaccion(request.getInfoTransaccion()); vtdBase.setCliente(request.getCliente()); vtdBase.setDocumento(request.getDocumento()); vtdBase.setEncuesta(request.getEncuesta()); // here i should send the tablename value vtdBaseRepository.save(vtdBase); } }

URL repo: https://github.com/jledesma84/spring-data-dynamoDB-dynamicTable.git Wiki: https://github.com/derjust/spring-data-dynamodb/wiki/Alter-table-name-during-runtime

Specifications

dependencies { compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.0.4.RELEASE' compile group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '2.0.4.RELEASE' compile group: 'org.springframework', name: 'spring-web', version: '4.3.1.RELEASE' testCompile group: 'org.springframework', name: 'spring-test', version: '4.3.1.RELEASE' compile group: 'com.github.derjust', name: 'spring-data-dynamodb', version: '5.0.3' compile group: 'com.amazonaws', name:'aws-java-sdk-dynamodb', version:'1.11.396' }

eggsy84 commented 6 years ago

Might help some people but after reviewing https://github.com/derjust/spring-data-dynamodb/issues/59

I've found that it still works (in 5.03) using XML config.

Created a demo repo that might help people here:

https://github.com/clos-consultancy/SpringDynamoDB