先設定 build.gradle:
// build.gradle
repositories {
maven {
// dynamodb local url
url 'https://s3-us-west-2.amazonaws.com/dynamodb-local/release'
}
testCompile (
'org.junit.jupiter:junit-jupiter-api:5.2.0',
'com.amazonaws:DynamoDBLocal:1.11.119'
)
testRuntime (
// junit5
'org.junit.jupiter:junit-jupiter-engine:5.2.0',
// dynamodb local
'com.almworks.sqlite4java:libsqlite4java-linux-i386:1.0.392',
'com.almworks.sqlite4java:libsqlite4java-osx:1.0.392'
)
}
// link native sqlite4java
task copyNativeDeps(type: Copy) {
from (configurations.testCompile) {
include '*.dylib'
include '*.so'
include '*.dll'
}
into 'build/libs'
}
test {
useJUnitPlatform()
dependsOn copyNativeDeps
doFirst {
// setup sqlite4java path
systemProperty 'java.library.path', 'build/libs'
}
testLogging {
showStandardStreams = true
}
}
接下來就是測試:
package example;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Test;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.local.embedded.DynamoDBEmbedded;
import com.amazonaws.services.dynamodbv2.model.AttributeDefinition;
import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;
import com.amazonaws.services.dynamodbv2.model.KeySchemaElement;
import com.amazonaws.services.dynamodbv2.model.KeyType;
import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;
public class DynamoDBLocalTest {
@Test
public void createTable() throws Exception {
AmazonDynamoDB client = DynamoDBEmbedded.create().amazonDynamoDB();
DynamoDB dynamodb = new DynamoDB(client);
String tableName = "Employee";
List keySchema = new ArrayList();
keySchema.add(new KeySchemaElement().withAttributeName("Name").withKeyType(KeyType.HASH));
List attributeDefinitions = new ArrayList();
attributeDefinitions.add(new AttributeDefinition().withAttributeName("Name").withAttributeType("S"));
CreateTableRequest request = new CreateTableRequest().withTableName(tableName).withKeySchema(keySchema)
.withProvisionedThroughput(
new ProvisionedThroughput().withReadCapacityUnits(1L).withWriteCapacityUnits(1L))
.withAttributeDefinitions(attributeDefinitions);
System.out.println("Issuing CreateTable request for " + tableName);
Table table = dynamodb.createTable(request);
System.out.println("Waiting for " + tableName + " to be created...this may take a while...");
table.waitForActive();
System.out.println(dynamodb.getTable(tableName).describe());
}
}
參考資料:
- AWS文件: 设置 DynamoDB Local
- StackOverflow: Run Dynamodb local as part of a Gradle Java project
- AWS文件: 使用适用于 Java 的 AWS 开发工具包创建示例表和上传数据
系列:
- [Java] AWS Lambda 入門
- [Java] AWS Lambda + DynamoDB
- AWS Lambda + API Gateway
- [Java] JAX-RS on AWS Lambda
- [Java] JUnit with DynamoDBLocal
沒有留言:
張貼留言