You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS SDK for Java调用DynamoDB查询时出现重复ExecutionAttributes错误

解决AWS SDK v2中DualstackEndpointsEnabled ExecutionAttribute重复冲突问题

问题场景

开发Spring Boot微服务查询DynamoDB表时,AWS CLI可正常操作表数据,但应用运行时抛出以下异常:

Handler dispatch failed; nested exception is java.lang.ExceptionInInitializerError

根因:java.lang.IllegalArgumentException: No duplicate ExecutionAttribute names allowed but both ExecutionAttributes 528c2979 and 6970b040 have the same name: DualstackEndpointsEnabled. ExecutionAttributes should be referenced from a shared static constant to protect against erroneous or unexpected collisions.

已尝试切换IDE(IntelliJ/VSCode)、使用Maven命令行启动、卸载DynamoDB插件、终止443端口AWS进程,均未解决。

核心调用代码:

public PageIterable<DynamoOrder> getOrdersByChannel(String channelName) {

    DynamoDbTable<DynamoOrder> orderTable = getTable();

    AttributeValue channelNameAttribute = AttributeValue.builder().s(channelName).build();
    Expression expression = Expression.builder().expression("marketplaceChannelName = :v_marketplaceChannelName")
            .putExpressionValue(":v_marketplaceChannelName", channelNameAttribute).build();

    return orderTable.scan(ScanEnhancedRequest.builder().filterExpression(expression).build());

}

问题分析

这个异常本质是AWS SDK v2的ExecutionAttribute命名冲突,通常由以下原因导致:

  • 项目依赖中存在多个版本的AWS SDK核心包(sdk-core),不同版本的类生成了同名的DualstackEndpointsEnabled属性实例。
  • 类加载器重复加载了ExecutionAttribute类,导致静态常量实例重复。

解决方案

1. 统一AWS SDK依赖版本

  • 执行Maven命令查看依赖树,定位冲突的sdk-core版本:
    mvn dependency:tree | grep "software.amazon.awssdk:sdk-core"
    
  • 在pom.xml的<dependencyManagement>中导入AWS SDK BOM,强制统一所有相关依赖版本:
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>bom</artifactId>
                <version>2.20.150</version> <!-- 替换为稳定兼容版本 -->
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  • 检查第三方依赖,排除其中引入的旧版本AWS SDK模块。

2. 清理构建与IDE缓存

  • 清理Maven缓存并重新构建:
    mvn clean install -U
    
  • 清理IDE缓存(以IntelliJ为例):File → Invalidate Caches...,勾选Clear file system cache and local history后重启IDE。

3. 规范DynamoDB客户端配置

确保DynamoDB客户端和表实例以单例方式创建,避免重复实例化引发类加载问题:

@Configuration
public class DynamoDbConfig {
    @Bean
    public DynamoDbEnhancedClient dynamoDbEnhancedClient() {
        return DynamoDbEnhancedClient.create();
    }

    @Bean
    public DynamoDbTable<DynamoOrder> orderTable(DynamoDbEnhancedClient enhancedClient) {
        return enhancedClient.table("your-order-table-name", TableSchema.fromBean(DynamoOrder.class));
    }
}

之后在业务类中通过依赖注入获取DynamoDbTable实例,替代自定义的getTable()方法。

4. 排查类加载冲突

  • 检查是否存在自定义类加载器配置,或第三方框架(如Spring Cloud)引入的类加载规则,避免重复加载SDK核心类。
  • 若使用Spring Cloud AWS,确保其版本与AWS SDK v2兼容,避免依赖冲突。

内容的提问来源于stack exchange,提问作者Humid-IDE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:03:19