Ответ 1
РЕДАКТИРОВАТЬ: 23 сентября 2015 г.
Появилось объявление о 3 августа 2015 г., которое теперь добавляет возможность иметь встроенный DynamoDB локальный запуск в том же процессе. Вы можете добавить зависимость теста Maven и использовать один из способов, чтобы запустить его.
<!--Dependency:-->
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>DynamoDBLocal</artifactId>
<version>[1.11,2.0)</version>
</dependency>
</dependencies>
<!--Custom repository:-->
<repositories>
<repository>
<id>dynamodb-local-oregon</id>
<name>DynamoDB Local Release Repository</name>
<url>https://s3-us-west-2.amazonaws.com/dynamodb-local/release</url>
</repository>
</repositories>
И вот пример, взятый из awslabs/aws-dynamodb-examples Репозиторий Github:
AmazonDynamoDB dynamodb = null;
try {
// Create an in-memory and in-process instance of DynamoDB Local that skips HTTP
dynamodb = DynamoDBEmbedded.create().amazonDynamoDB();
// use the DynamoDB API with DynamoDBEmbedded
listTables(dynamodb.listTables(), "DynamoDB Embedded");
} finally {
// Shutdown the thread pools in DynamoDB Local / Embedded
if(dynamodb != null) {
dynamodb.shutdown();
}
}
// Create an in-memory and in-process instance of DynamoDB Local that runs over HTTP
final String[] localArgs = { "-inMemory" };
DynamoDBProxyServer server = null;
try {
server = ServerRunner.createServerFromCommandLineArgs(localArgs);
server.start();
dynamodb = AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration(
// we can use any region here
new AwsClientBuilder.EndpointConfiguration("http://localhost:8000", "us-west-2"))
.build();
// use the DynamoDB API over HTTP
listTables(dynamodb.listTables(), "DynamoDB Local over HTTP");
} finally {
// Stop the DynamoDB Local endpoint
if(server != null) {
server.stop();
}
}
Старый ответ
Как вы сказали, в настоящее время нет встроенного способа от DynamoDBLocal или SDK, чтобы сделать это прямо сейчас. Было бы неплохо, если бы был встроенный DynamoDBLocal, который вы могли бы запустить в том же процессе.
Вот простой способ обхода/решения с помощью java.lang.Process
, чтобы запустить его и программно закрыть его, если другие заинтересованы.
Документацию для DynamoDBLocal можно найти здесь и вот текущее определение аргументов:
-
-inMemory
- Запуск в памяти, отсутствие дампа файла -
-port 4000
- Общайтесь с портом 4000. -
-sharedDb
- используйте один файл базы данных вместо отдельных файлов для каждого учетного номера и региона.
Обратите внимание, что это используется с последней версией DynamoDBLocal по состоянию на 5 августа 2015 года.
final ProcessBuilder processBuilder = new ProcessBuilder("java",
"-Djava.library.path=./DynamoDBLocal_lib",
"-jar",
"DynamoDBLocal.jar",
"-sharedDb",
"-inMemory",
"-port",
"4000")
.inheritIO()
.directory(new File("/path/to/dynamo/db/local"));
final Process process = processBuilder.start();
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
System.out.println("Shutdown DynamoDBLocal");
process.destroy();
try {
process.waitFor(3, TimeUnit.SECONDS);
} catch (InterruptedException e) {
System.out.println("Process did not terminate after 3 seconds.");
}
System.out.println("DynamoDBLocal isAlive=" + process.isAlive());
}
});
// Do some stuff