为了使用DynamoDBLocal,您需要遵循以下步骤.
>获取Direct DynamoDBLocal依赖关系
>获取本机SQLite4Java依赖项
>设置sqlite4java.library.path来显示本机库
获取Direct DynDA数据库依赖关系
这一个是容易的.您需要这个存储库,如AWS Forums所述.
com.amazonaws
DynamoDBLocal
1.11.0.1
dynamodb-local
DynamoDB Local Release Repository
https://s3-us-west-2.amazonaws.com/dynamodb-local/release
2.获取本机SQLite4Java依赖项
如果不添加这些依赖关系,则测试将失败,并出现500内部错误.
首先添加这些依赖项.
com.almworks.sqlite4java
sqlite4java
1.0.392
test
com.almworks.sqlite4java
sqlite4java-win32-x86
1.0.392
dll
test
com.almworks.sqlite4java
sqlite4java-win32-x64
1.0.392
dll
test
com.almworks.sqlite4java
libsqlite4java-osx
1.0.392
dylib
test
com.almworks.sqlite4java
libsqlite4java-linux-i386
1.0.392
so
test
com.almworks.sqlite4java
libsqlite4java-linux-amd64
1.0.392
so
test
然后添加这个插件来获取特定文件夹的本地依赖项.
org.apache.maven.plugins
maven-dependency-plugin
2.10
copy
test-compile
copy-dependencies
test
so,dll,dylib
${project.basedir}/native-libs
3.设置sqlite4java.library.path来显示本机库
最后一步,您需要将sqlite4java.library.path系统属性设置为native-libs目录.在创建本地服务器之前,可以这样做.
System.setProperty("sqlite4java.library.path", "native-libs");
通过这些步骤,您可以根据需要使用DynamoDBLocal.这是一个Junit规则,为此创建本地服务器.
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.local.main.ServerRunner;
import com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer;
import org.junit.rules.ExternalResource;
import java.io.IOException;
import java.net.ServerSocket;
/**
* Creates a local DynamoDB instance for testing.
*/
public class LocalDynamoDBCreationRule extends ExternalResource {
private DynamoDBProxyServer server;
private AmazonDynamoDB amazonDynamoDB;
public LocalDynamoDBCreationRule() {
// This one should be copied during test-compile time. If project's basedir does not contains a folder
// named 'native-libs' please try '$mvn clean install' from command line first
System.setProperty("sqlite4java.library.path", "native-libs");
}
@Override
protected void before() throws Throwable {
try {
final String port = getAvailablePort();
this.server = ServerRunner.createServerFromCommandLineArgs(new String[]{"-inMemory", "-port", port});
server.start();
amazonDynamoDB = new AmazonDynamoDBClient(new BasicAWSCredentials("access", "secret"));
amazonDynamoDB.setEndpoint("http://localhost:" + port);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
protected void after() {
if (server == null) {
return;
}
try {
server.stop();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public AmazonDynamoDB getAmazonDynamoDB() {
return amazonDynamoDB;
}
private String getAvailablePort() {
try (final ServerSocket serverSocket = new ServerSocket(0)) {
return String.valueOf(serverSocket.getLocalPort());
} catch (IOException e) {
throw new RuntimeException("Available port was not found", e);
}
}
}
你可以使用这样的规则
@RunWith(JUnit4.class)
public class UserDAOImplTest {
@ClassRule
public static final LocalDynamoDBCreationRule dynamoDB = new LocalDynamoDBCreationRule();
}