Age*_*ntX 3 amazon-dynamodb aws-sdk
我正在尝试使用AWS Java SDK连接到Local Dynamo DB.所以我安装了Local Dynamo DB并启动了javascript shell.一切正常,shell从通常的地址开始http://localhost:8000/shell/
现在,当我尝试通过AWS SDK访问Dynamo数据库实例时,事情开始破裂.
这是我的代码:
public class MyDynamoDB {
private AmazonDynamoDBClient client;
public MyDynamoDB() {
client = new AmazonDynamoDBClient();
client.setEndpoint("http://localhost:8000");
}
public void saveAndLoad() {
DynamoDBMapperConfig config = new DynamoDBMapperConfig(new TableNameOverride("xyz"));
DynamoDBMapper mapper = new DynamoDBMapper(client, config);
Data data = new Data();
...
mapper.save(data);
//check if persisted
Data d = mapper.load(Data.class, "Key");
if (d != null) {
System.out.println(" Found data: " + d.getStuff());
} else {
System.out.println("Data not found");
}
}
}
Run Code Online (Sandbox Code Playgroud)
在运行这个时,我得到以下堆栈跟踪
Nov 19, 2015 4:00:47 PM com.amazonaws.http.AmazonHttpClient executeHelper
INFO: Unable to execute HTTP request: Connection refused: connect
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
Run Code Online (Sandbox Code Playgroud)
小智 11
您需要在命令提示符中触发DynamoDB ..
转到Dynamodb cli的安装位置并运行以下命令
java -Djava.library.path =./ DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
验证它是否由http:// localhost:8000/shell /运行
小智 5
刚刚遇到了同样的问题 - 在端点 url 中添加斜线为我解决了这个问题。
client.setEndpoint( "http://localhost:8000/");
Run Code Online (Sandbox Code Playgroud)
如果您使用 SAM-LOCAL 或使用 eclipse 开发 aws lambda 函数,则此答案可能很有用。
Short Answer为环回分配 IP 别名以使用不同的地址到达 127.0.0.1,并将端点更新为该地址
从命令行运行
ifconfig lo0 alias 172.16.123.1
从 lambda 代码而不是访问http://localhost:8000/使用http://172.16.123.1:8000/
请参阅此链接以获取解释。
长答案
在 lambda 函数 pom 中
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-dynamodb</artifactId>
<version>1.11.313</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
开始使用 dynomodb
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
Run Code Online (Sandbox Code Playgroud)
做IP别名
ifconfig lo0 alias 172.16.123.1
Run Code Online (Sandbox Code Playgroud)
要从代码访问 DynmoDb,请执行
DynamoDB dynamoDb = new DynamoDB(AmazonDynamoDBClientBuilder.standard().withCredentials(new EnvironmentVariableCredentialsProvider()).withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://172.16.123.1:8000/", "local")).build());
Run Code Online (Sandbox Code Playgroud)
完成 lambda 函数的测试后,请执行以下操作
ifconfig lo0 -alias 172.16.123.1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7977 次 |
| 最近记录: |