The primary goal of the Spring® Data project is to make it easier to build Spring-powered applications that use data access technologies.
This module deals with enhanced support for a data access layer built on AWS DynamoDB.
Technical infos can be found on the project page.
For a demo of spring-data-dynamodb, using spring-data-rest to showcase DynamoDB repositories exposed with REST, please see spring-data-dynamodb-examples.
Download the JAR though Maven Central (SNAPSHOT
builds are available via the OSSRH snapshot repository ):
<dependency>
<groupId>com.github.derjust</groupId>
<artifactId>spring-data-dynamodb</artifactId>
<version>5.1.0</version>
</dependency>
Setup DynamoDB configuration as well as enabling Spring-Data DynamoDB repository support via Annotation (XML-based configuration)
Create a DynamoDB entity User for this table:
@DynamoDBTable(tableName = "User")
public class User {
private String id;
private String firstName;
private String lastName;
public User() {
// Default constructor is required by AWS DynamoDB SDK
}
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@DynamoDBHashKey
@DynamoDBAutoGeneratedKey
public String getId() {
return id;
}
@DynamoDBAttribute
public String getFirstName() {
return firstName;
}
@DynamoDBAttribute
public String getLastName() {
return lastName;
}
//setter & hashCode & equals
}
Create a CRUD repository interface UserRepository:
@EnableScan
public interface UserRepository extends CrudRepository<User, String> {
List<User> findByLastName(String lastName);
List<User> findByFirstName(String firstName);
}
or for paging and sorting...
public interface PagingUserRepository extends PagingAndSortingRepository<User, String> {
Page<User> findByLastName(String lastName, Pageable pageable);
Page<User> findByFirstName(String firstName, Pageable pageable);
@EnableScan
@EnableScanCount
Page<User> findAll(Pageable pageable);
}
Create the configuration class DynamoDBConfig:
@Configuration
@EnableDynamoDBRepositories(basePackageClasses = UserRepository.class)
public static class DynamoDBConfig {
@Value("${amazon.aws.accesskey}")
private String amazonAWSAccessKey;
@Value("${amazon.aws.secretkey}")
private String amazonAWSSecretKey;
public AWSCredentialsProvider amazonAWSCredentialsProvider() {
return new AWSStaticCredentialsProvider(amazonAWSCredentials());
}
@Bean
public AWSCredentials amazonAWSCredentials() {
return new BasicAWSCredentials(amazonAWSAccessKey, amazonAWSSecretKey);
}
@Bean
public DynamoDBMapperConfig dynamoDBMapperConfig() {
return DynamoDBMapperConfig.DEFAULT;
}
@Bean
public DynamoDBMapper dynamoDBMapper(AmazonDynamoDB amazonDynamoDB, DynamoDBMapperConfig config) {
return new DynamoDBMapper(amazonDynamoDB, config);
}
@Bean
public AmazonDynamoDB amazonDynamoDB() {
return AmazonDynamoDBClientBuilder.standard().withCredentials(amazonAWSCredentialsProvider())
.withRegion(Regions.US_EAST_1).build();
}
}
And finally write a test client UserRepositoryIT or start calling it from your existing Spring code.
The full source code is available at spring-data-dynamodb-examples' simple example
More sample code can be found in the spring-data-dynamodb-examples project.
Advanced topics can be found in the wiki.
The major and minor number of this library refers to the compatible Spring framework version. The build number is used as specified by SEMVER.
API changes will follow SEMVER and loosly the Spring Framework releases.
spring-data-dynamodb version |
Spring Boot compatibility | Spring Framework compatibility | Spring Data compatibility |
---|---|---|---|
1.0.x | >= 3.1 && < 4.2 | ||
4.2.x | >= 1.3.0 && < 1.4.0 | >= 4.2 && < 4.3 | Gosling-SR1 |
4.3.x | >= 1.4.0 && < 2.0 | >= 4.3 && < 5.0 | Gosling-SR1 |
4.4.x | >= 1.4.0 && < 2.0 | >= 4.3 && < 5.0 | Hopper-SR2 |
4.5.x | >= 1.4.0 && < 2.0 | >= 4.3 && < 5.0 | Ingalls |
5.0.x | >= 2.0 && < 2.1 | >= 5.0 && < 5.1 | Kay-SR1 |
5.1.x | >= 2.1 | >= 5.1 | Lovelace-SR1 |
spring-data-dynamodb
depends directly on spring-data
as also spring-context
, spring-data
and spring-tx
.
compile
and runtime
dependencies are kept to a minimum to allow easy integartion, for example into
Spring-Boot projects.
The code base has some history already in it - let's clarify it a bit:
com.github.derjust:spring-data-dynamodb
The Java package name/XSD namespace never changed from org.socialsignin.spring.data.dynamodb
.
But the XSD is now also available at https://derjust.github.io/spring-data-dynamodb/spring-dynamodb-1.0.xsd
.