• Stars
    star
    169
  • Rank 224,453 (Top 5 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created about 11 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Simplifies the development of creating an Amazon DynamoDB-based Java data access layer

codecov.io Build Status Maven Central

Spring Data DynamoDB

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.

Supported Features

Demo application

For a demo of spring-data-dynamodb, using spring-data-rest to showcase DynamoDB repositories exposed with REST, please see spring-data-dynamodb-examples.

Quick Start

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

More sample code can be found in the spring-data-dynamodb-examples project.

Advanced topics can be found in the wiki.

Version & Spring Framework compatibility

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.

History

The code base has some history already in it - let's clarify it a bit:

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.

More Repositories

1

spring-data-dynamodb-demo

Demo of Amazon DynamoDB Spring-Data repositories using Spring-Data-Rest
Java
28
star
2

spring-social-lastfm

LastFm API binding and connect support using Spring Social. This project adapts LastFm's APi to be pseudo-oauth so it can be used with ProviderSignInController and ConnectController - work in progress
Java
9
star
3

spring-social-hibernate-jpa

Hibernate Implementation of Spring-Social-JPA
Java
5
star
4

spring-social-mixcloud

Mixcloud API binding and connect support for Spring Social - work in progress
Java
5
star
5

spring-security-spring-data-dynamodb

DynamoDB implementations of Spring Security persistence components, showcasing the spring-data-dynamodb module.
Java
3
star
6

spring-social-spring-data-dynamodb

Spring Social UsersConnectionRepository implementation using DynamoDB for persistence as an alternative to JDBC versions in spring-social-core
Java
2
star
7

spring-social-exfm

Ex.Fm API Java Client
Java
2
star
8

spring-social-spring-data

Base project for implementions of Spring Social UserConnectionRepository using Spring Data Repositories
Java
1
star
9

opensource.cloudplaylists.com

Next generation version of CloudPlaylists.com
1
star
10

spring-social-music

1
star
11

michaellavelle.github.com

1
star
12

spring-social-core-extension

Custom extensions to spring-social-core, including a simple in-memory connection repository implementations and a Test suite for such custom repositories
Java
1
star
13

spring-social-rdio

1
star
14

spring-social-lastfm-non-oauth-web

LastFm API binding and connect support using Spring Social. This project contains LastFm specific versions of ProviderSignInController and ConnectController which can handle LastFm's non-oauth scheme, as an alternative to the pseduo-oauth strategy of base spring-social-lastfm project.
1
star