Amazon dynamodb 无法连接到本地dynamodb数据库

Amazon dynamodb 无法连接到本地dynamodb数据库,amazon-dynamodb,aws-sdk,Amazon Dynamodb,Aws Sdk,我的应用程序需要访问dynamo db表,为了简化我们的开发,我创建了一个本地spring配置文件来使用本地dynamo db实例 为了开始工作,我从这里下载了本地dynamo db的最新版本,解压缩包并使用以下命令启动dynamo db: $ java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb -dbPath /c/dev/DynamoDb/ Initializing DynamoDB L

我的应用程序需要访问dynamo db表,为了简化我们的开发,我创建了一个本地spring配置文件来使用本地dynamo db实例

为了开始工作,我从这里下载了本地dynamo db的最新版本,解压缩包并使用以下命令启动dynamo db:

$ java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb -dbPath /c/dev/DynamoDb/

Initializing DynamoDB Local with the following configuration:
Port:   8000
InMemory:       false
DbPath: C:/dev/DynamoDb/
SharedDb:       true
shouldDelayTransientStatuses:   false
CorsParams:     *
尝试从另一个命令提示符窗口重新启动将失败,因为端口8000已在使用中。 这让我觉得一切似乎都开始得很好

现在,作为第二步,我在配置类中创建了一个dynamo db bean:

@Bean
@Profile("devlocal")
public AmazonDynamoDB localAmazonDynamoDB() {
        return AmazonDynamoDBClientBuilder.standard()
            .withEndpointConfiguration(
                new AwsClientBuilder.EndpointConfiguration("http://localhost:8000/", "NoRegion"))
            .withCredentials(
                new AWSStaticCredentialsProvider(new BasicAWSCredentials("FakeAmazonAWSAccessKey", "FakeamazonAWSSecretKey")))
            .build();
}
这似乎是相当基本的设置。但是,当启动我的应用程序时,我在日志中遇到此异常,并且应用程序无法启动:

Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.JavaType.isReferenceType()Z
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:397) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:476) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3899) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3794) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2797) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.amazonaws.internal.config.InternalConfig.loadfrom(InternalConfig.java:250) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.internal.config.InternalConfig.load(InternalConfig.java:263) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.internal.config.InternalConfig$Factory.<clinit>(InternalConfig.java:336) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.util.VersionInfoUtils.userAgent(VersionInfoUtils.java:142) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.util.VersionInfoUtils.initializeUserAgent(VersionInfoUtils.java:137) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.util.VersionInfoUtils.getUserAgent(VersionInfoUtils.java:100) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:78) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.ClientConfigurationFactory.getDefaultConfig(ClientConfigurationFactory.java:46) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientConfigurationFactory.getDefaultConfig(AmazonDynamoDBClientConfigurationFactory.java:31) ~[aws-java-sdk-dynamodb-1.11.662.jar:na]
at com.amazonaws.ClientConfigurationFactory.getConfig(ClientConfigurationFactory.java:36) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.client.builder.AwsClientBuilder.resolveClientConfiguration(AwsClientBuilder.java:169) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.client.builder.AwsClientBuilder.access$000(AwsClientBuilder.java:54) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.client.builder.AwsClientBuilder$SyncBuilderParams.<init>(AwsClientBuilder.java:505) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.client.builder.AwsClientBuilder.getSyncClientParams(AwsClientBuilder.java:441) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46) ~[aws-java-sdk-core-1.11.662.jar:na]
at com.my.company.my.app.webservice.config.DynamoConfig.localAmazonDynamoDB(DynamoConfig.java:55) ~[classes/:na]
原因:java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.JavaType.isReferenceType()Z
在com.fasterxml.jackson.databind.deser.DeserializerCache.\u createDeserializer2(DeserializerCache.java:397)~[jackson-databind-2.8.4.jar:2.8.4]
在com.fasterxml.jackson.databind.deser.DeserializerCache.\u createDeserializer(DeserializerCache.java:349)~[jackson-databind-2.8.4.jar:2.8.4]
在com.fasterxml.jackson.databind.deser.DeserializerCache.\u createAndCache2(DeserializerCache.java:264)~[jackson-databind-2.8.4.jar:2.8.4]
在com.fasterxml.jackson.databind.deser.DeserializerCache.\u createAndCacheValueDeserializer(DeserializerCache.java:244)~[jackson-databind-2.8.4.jar:2.8.4]
在com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)~[jackson-databind-2.8.4.jar:2.8.4]
在com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:476)~[jackson-databind-2.8.4.jar:2.8.4]
在com.fasterxml.jackson.databind.ObjectMapper.\u findRootDeserializer(ObjectMapper.java:3899)~[jackson-databind-2.8.4.jar:2.8.4]
在com.fasterxml.jackson.databind.ObjectMapper.\u readMapAndClose(ObjectMapper.java:3794)~[jackson-databind-2.8.4.jar:2.8.4]
在com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2797)~[jackson-databind-2.8.4.jar:2.8.4]
在com.amazonaws.internal.config.InternalConfig.loadfrom(InternalConfig.java:250)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.internal.config.InternalConfig.load(InternalConfig.java:263)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.internal.config.InternalConfig$Factory.(InternalConfig.java:336)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.util.versioninfutils.userAgent(versioninfutils.java:142)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.util.VersionInfoUtils.initializeUserAgent(VersionInfoUtils.java:137)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.util.VersionInfoUtils.getUserAgent(VersionInfoUtils.java:100)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.ClientConfiguration.(ClientConfiguration.java:78)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.ClientConfigurationFactory.getDefaultConfig(ClientConfigurationFactory.java:46)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.services.dynamodbv2.amazondynamodclientconfigurationfactory.getDefaultConfig(amazondynamodclientconfigurationfactory.java:31)~[aws-java-sdk-dynamodb-1.11.662.jar:na]
在com.amazonaws.ClientConfigurationFactory.getConfig(ClientConfigurationFactory.java:36)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.client.builder.AwsClientBuilder.resolveClientConfiguration(AwsClientBuilder.java:169)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.client.builder.AwsClientBuilder.access$000(AwsClientBuilder.java:54)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.client.builder.AwsClientBuilder$SyncBuilderParams.(AwsClientBuilder.java:505)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.client.builder.AwsClientBuilder.getSyncClientParams(AwsClientBuilder.java:441)~[aws-java-sdk-core-1.11.662.jar:na]
在com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46)~[aws-java-sdk-core-1.11.662.jar:na]
在com.my.company.my.app.webservice.config.DynamoConfig.localAmazonDynamoDB(DynamoConfig.java:55)~[classes/:na]
停止本地dynamo db服务器并尝试启动应用程序将产生完全相同的结果,这使我认为在代码中尝试连接到dynamo服务器的方式是不正确的

我的本地环境是windows 10

提前感谢您的投入

注意


我在我的个人笔记本电脑上做了完全相同的设置,一切正常。我的笔记本电脑正在运行Fedora Linux,但我认为这不应该成为问题。

提供
aws sdk
版本和
DynamoConfig.java
第55行。aws-java-sdk-dynamodb版本为1.11.662。DynamoConfig.java中的第55行只是对build()方法的调用。如果我在调试器al中不使用build()对表达式进行求值,它将解析为AmazondynamodClientBuilder实例,这似乎是一个冲突依赖项的问题,如果使用maven,请查看依赖项树并检查,其中com.fasterxml.jackson.databind的依赖项。是的,最好的祝愿这就是原因。我被限制使用1.11.662,因为这是我们公司存储库中可用的最新版本。我认为这是错误的,它从来没有工作过,因为它依赖于jackson dataformat cbor版本2.6.7。我一被迫依赖2.9.9,问题就消失了。aws sdk本月仅发布了至少20次,而且依赖性问题也会悄然出现。请将您的评论作为答案发布,以便我可以接受。助教