尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AWS SDK for Java v2 2.20.x 版本全解析:JDK 21 支持、S3 跨区域访问与 DynamoDB Enhanced 文档 API

AWS SDK for Java v2 2.20.x 版本全解析:JDK 21 支持、S3 跨区域访问与 DynamoDB Enhanced 文档 API AWS SDK for Java v2 2.20.x 版本全解析JDK 21 支持、S3 跨区域访问与 DynamoDB Enhanced 文档 API【免费下载链接】aws-sdk-java-v2The official AWS SDK for Java - Version 2项目地址: https://gitcode.com/GitHub_Trending/aw/aws-sdk-java-v2本文以 changelogs/2.20.x-CHANGELOG.md 为骨架系统梳理 AWS SDK for Java v2 从 2.20.02023-02-08到 2.20.1622023-10-06共 163 个增量版本的核心演进。读者将掌握该版本区间内 SDK 核心层、S3、DynamoDB Enhanced Client、HTTP 客户端等模块的关键特性与修复细节并学会从 changelog 快速定位与自己业务相关的变更评估升级影响。一、2.20.x 版本区间概况八个月、163 次发布2.20.x 是 AWS SDK for Java v2 在 2023 年的一个重要发布区间采用服务模型更新 SDK 自身修复并行的日常发布节奏起止时间2023-02-082.20.0至 2023-10-062.20.162发布密度几乎每个工作日都有新版本部分日期一天发布两个补丁版本例如 2023-07-19 同时发布 2.20.106 与 2.20.1072023-07-27 同时发布 2.20.113 与 2.20.114内容构成每个版本条目按版本号 日期开头随后按 AWS 服务分组列出Features新功能/新 API与Bugfixes缺陷修复并单独列出社区贡献者Contributors变更来源绝大多数服务级变更来自 AWS 各服务的模型model更新SDK 通过代码生成器将新 API、新字段、新枚举同步到 Java 客户端中真正属于 SDK 自身的变更则集中在AWS SDK for Java v2、Amazon S3、DynamoDB Enhanced Client、S3 Transfer Manager、Netty NIO HTTP Client等条目下。从代码结构看codegen 模块负责把服务模型转换为 Java 客户端代码core 与 services 目录则存放 SDK 运行时与服务客户端这正是 changelog 中服务模型更新与SDK 内部修复两类条目在仓库中的落点。二、如何阅读这份 changelog结构约定与定位方法2.1 条目结构# __2.20.141__ __2023-09-05__ - 版本号 发布日期 ## __AWS SDK for Java v2__ - 变更主体服务名或 SDK 模块名 - ### Features - 新增能力 - Add support for RequestCompression trait to GZIP compress requests. - ### Bugfixes - 缺陷修复 - ... ## __Contributors__ - 社区贡献者致谢2.2 变更主体的三类归属AWS SDK for Java v2SDK 核心层变更影响所有服务客户端如 JDK 21 支持、Jackson 升级、指标、Executor 行为Amazon S3/DynamoDB Enhanced Client/S3 Transfer Manager对应仓库中的 services/s3、services-custom/dynamodb-enhanced、services-custom/s3-transfer-manager 模块Netty NIO HTTP Client/AWS CRT HTTP Client/Apache HttpClient对应 http-clients 目录下的各 HTTP 客户端实现。2.3 版本命名与仓库对应changelog 文件名即版本区间2.20.x-CHANGELOG.md对应整个 2.20 小版本系列。仓库根目录的 CHANGELOG.md 会汇总各区间内容changelogs 目录下还有 2.0.x 至 2.53.x 的完整历史。通过 pom.xml 中的版本号可以确认当前仓库代码处于哪个发布节点。三、SDK 核心层演进构建、序列化、可观测性与异步性能3.1 支持使用 JDK 21 构建2.20.1602.20.1602023-10-04起 SDK 支持在 JDK 21 环境下构建。对使用者而言这意味着可以在 Java 21 项目中使用该版本 SDK 而无需降级工具链对 SDK 自身而言官方 CI 需要同时验证多个 JDK 版本下的编译与运行兼容性。3.2 Jackson 依赖升级至 2.15.22.20.1402.20.1402023-09-01将 JSON 序列化依赖 Jackson 升级到 2.15.2。SDK 内部大量使用 JSON 协议JSON/JSON1.0、RestJson 等Jackson 版本升级通常带来安全修复与解析性能改进。若你的项目在依赖管理中覆盖了 Jackson 版本建议与 SDK 的 BOM 对齐以避免冲突详见 bom 与 bom-internal。3.3 请求压缩RequestCompression trait 支持 GZIP2.20.1412.20.1412023-09-05为 SDK 增加了对 SmithyRequestCompressiontrait 的支持可对符合条件的请求体进行 GZIP 压缩后再发送降低传输字节数、改善弱网下的上传体验。仓库中的实现位于 codegen/src/main/java/software/amazon/awssdk/codegen/compression/RequestCompression.java 与 codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/traits/RequestCompressionTrait.java并由 JSON/Query/XML 三种协议规格JsonProtocolSpec、QueryProtocolSpec、XmlProtocolSpec在代码生成阶段接入可见该能力是协议无关、由服务模型驱动开启的。3.4 非 JSON String 请求体支持2.20.1532.20.1532023-09-22为 SDK 增加对非 JSON 的 String 类型请求体payload的序列化支持扩展了协议处理层对自定义 String 编码请求的兼容性相关代码位于 core/protocols 下的各协议实现。3.5 可观测性指标SERVICE_ENDPOINT 与 ErrorTypeSERVICE_ENDPOINT指标2.20.128新增核心指标记录请求实际发送到的端点scheme authority用于排查请求到底发去了哪里的问题尤其在多区域、端点覆盖endpoint override场景下很有价值ErrorType指标2.20.70为所有失败的 API 调用尝试记录错误大类分为Throttling 错误、非限流的服务错误、I/O 错误、API 调用/调用尝试超时四类帮助快速定位问题方向。这两个指标都通过 SDK 的指标 SPI见 core/metrics-spi对外发布可接入 CloudWatch Metric Publishermetric-publishers/cloudwatch-metric-publisher等实现。3.6 异步请求体的零拷贝发布2.20.84 / 2.20.1022.20.842023-06-12为AsyncRequestBody增加unsafe与fromRemaining构造器支持直接基于字节数组与 ByteBuffer 发布避免不必要的拷贝2.20.1022023-07-10进一步提供 ByteBuffer 的零拷贝发布能力。对于大文件/大对象的上传场景合理使用这些构造器可以减少内存复制开销相关代码位于 core/sdk-core 的AsyncRequestBody实现中。3.7 客户端配置可见性ServiceClientConfiguration2.20.32 / 2.20.442.20.322023-03-24为SdkClient增加ServiceClientConfiguration把客户端设置区域、端点、凭据提供器等暴露给用户2.20.442023-04-11进一步在ServiceClientConfiguration中暴露endpointOverride。这组能力让运行期自省客户端当前使用了什么配置成为可能对框架集成、配置审计类需求很有用。3.8 凭据与身份相关改进WebIdentityToken 凭据预取2.20.106允许配置WebIdentityTokenFileCredentialsProvider的prefetchTime与staleTime在令牌过期前提前刷新规避过期瞬间的延迟尖峰默认链刷新标志2.20.62DefaultCredentialsProvider的异步凭据更新标志现在能被WebIdentityTokenFileCredentialProvider尊重Profile 读取性能2.20.54修复了基于 profile 的凭据导致每次请求都重新读取 profile 文件的问题Profile 竞态2.20.9修复ProfileCredentialsProvider偶发 NPE 的竞态条件文件缺失2.20.60配置文件与凭据文件不存在时不再抛 NPE而是返回空 map。3.9 线程池与资源管理修复FUTURE_COMPLETE_EXECUTOR 拒绝处理2.20.68修复执行器拒绝提交时 CompletableFuture 泄漏永不完成的问题。默认线程数为2 × CPU 核数上限 64有界队列 1000执行器可配置2.20.70SCHEDULED_EXECUTOR_SERVICE选项可被客户端配置覆盖IdleConnectionReaper2.20.84不再阻止HttpClientConnectionManager被 GC避免每次请求创建客户端但不关闭时的资源泄漏。3.10 其他值得关注的核心修复InputStreamSubscriber2.20.153 / 2.20.147修复close与onSubscribed并发调用导致 NPE、以及读取长度为 0 时应返回 0 的问题WaiterExecutor 递归转迭代2.20.88避免深递归栈溢出ByteBuffer 克隆2.20.124immutableCopyOf()克隆时未复制 limit 的缺陷已修复多版本类 shading2.20.142multirelease 类未被正确 shade/移除的问题已修复iam-policy-builder 新模块2.20.105新增software.amazon.awssdk:iam-policy-builder模块services-custom/iam-policy-builder简化 AWS IAM 策略的构造2.20.147 还修复了 principal 值为数组时的读取问题S3 校验和默认值2.20.0修复未显式设置校验算法时默认 MD5 校验被跳过的 Bug。四、S3 模块跨区域访问、CRT 客户端与多部分上传2.20.x 区间内 S3 相关变更密度很高按主题归纳如下。4.1 跨区域桶访问2.20.99标志性特性2.20.992023-07-05为 S3 客户端引入跨区域桶访问cross-region bucket access用一个配置了某区域的客户端即可访问位于其他区域的桶。其工作方式是首次访问某桶时请求发往客户端配置区域若桶不在该区域服务端错误响应中携带实际区域SDK 据此重定向并用正确区域重试随后将位置缓存复用。该能力在仓库中的落地包括构建器开关S3CrtAsyncClientBuilder#crossRegionAccessEnabled(Boolean)见 services/s3/src/main/java/software/amazon/awssdk/services/s3/S3CrtAsyncClientBuilder.java普通同步/异步客户端对应S3ClientBuilder/S3AsyncClientBuilder端点解析BucketEndpointProviderservices/s3/src/main/java/software/amazon/awssdk/services/s3/internal/crossregion/endpointprovider/BucketEndpointProvider.java在请求期根据桶位置动态修正端点客户端装饰S3SyncClientDecorator/S3AsyncClientDecoratorservices/s3/src/main/java/software/amazon/awssdk/services/s3/internal/client负责注入跨区域逻辑集成测试S3CrossRegionSyncIntegrationTest、S3CrossRegionAsyncIntegrationTest等services/s3/src/it/java/software/amazon/awssdk/services/s3/crossregion。注意changelog 同时提醒该模式可能增加延迟若桶与客户端区域相距较远。最佳实践仍是按桶所在区域创建专用客户端跨区域模式适合桶数量多、区域分散且不想维护多个客户端的场景。2.20.107 还修复了 us-east-1 客户端访问跨区域桶时的 307 临时重定向处理。4.2 CRT 客户端S3CrtAsyncClient配置能力补齐CRTAWS Common Runtime基于 S3 的异步客户端在 2.20.x 区间快速完善多部分上传阈值2.20.123新增S3CrtAsyncClientBuilder#thresholdInBytes可配置超过多大字节改用多部分上传默认与minimumPartSizeInBytes相同默认为 8MB。见 S3CrtAsyncClientBuilder.javaHTTP 配置2.20.28暴露S3CrtHttpConfiguration可配置代理与连接超时等 HTTP 设置对应 issue #3262TrustAllCertificates2.20.49 / 2.20.50为测试目的增加信任所有证书选项加速与路径式寻址2.20.42CRT 客户端支持开启 accelerate 端点与 path-style 寻址重试配置可见性2.20.43在S3CrtClient接口中暴露StandardRetryOptions上传缓冲优化2.20.37修复 CRT 客户端过早缓冲数据的问题上传缓冲从 16MB 降至 1MBissue #3726。4.3 多部分上传与传输细节修复Expect: 100-continue2.20.119UploadPartRequest增加该请求头服务端出错时可更快失败避免无谓的数据传输SdkException 双重包装2.20.153S3 多部分客户端与 CRT 客户端不再把SdkException不必要地再包装为SdkClientExceptionissue #4356最优分片数2.20.76修复计算出的最优分片数可能超过 10,000 上限的问题跨区域签名错误2.20.153修复配置为 us-east-1 的客户端跨区域调用时AuthorizationHeaderMalformed失败端点解析优化2.20.108简化并优化 S3 客户端端点解析提升性能NumberFormatException2.20.152修复特定响应反序列化失败问题。4.4 S3Presigner 支持预签名 DeleteObject2.20.1342.20.1342023-08-24为S3Presigner增加预签名DeleteObject支持补齐了删除操作的安全 URL 分享能力。其余 S3 服务级特性还包括ReplicationStatus枚举新增COMPLETED2.20.155可用 SDK 校验 S3 对象的复制状态列表/清单接口支持RestoreStatus可选头2.20.95等。五、DynamoDB Enhanced Client文档 API 与查询能力增强5.1 Enhanced Document API2.20.31标志性特性2.20.312023-03-23发布 DynamoDB Enhanced Client 的Enhanced Document API一种面向开放内容无固定 Schema 的数据的高层 API允许不绑定具体 Java 类型即读写 DynamoDB 条目。核心入口 services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/document/EnhancedDocument.java 提供// 从 JSON 直接构造 Document使用默认 AttributeConverterProvider EnhancedDocument doc EnhancedDocument.fromJson({\key\: \Value\}); // 通过 Builder 指定自定义转换器 EnhancedDocument custom EnhancedDocument.builder() .json({\key\: \Value\}) .attributeConverterProviders(CustomConverterProvider.create(), AttributeConverterProvider.defaultProvider()) .build();后续补丁持续完善该 API2.20.34 修复二进制属性值在EnhancedDocument.toJson()中必须以 Base64 编码表示2.20.124 修复单引号在toJson中被错误转义的问题issue #4156。5.2 扫描/查询分页与容量统计Page 增加统计2.20.153PageScan/Query 使用新增 count、scanned count 与返回的 consumed capacity方便评估扫描成本BatchGet 容量2.20.147BatchGetItemEnhancedRequest支持returnConsumedCapacity精确了解操作消耗的读单位社区贡献 psnileshgetItemWithResponse2.20.146DynamoDbTable#getItemWithResponse()允许指定ReturnConsumedCapacity等附加参数获取完整响应社区贡献 psnilesh。5.3 建表、索引与流配置修复GSI/LSI 建表 Bug2.20.153修复DynamoDbTable.createTable中分区键与表默认分区键相同的全局二级索引被错误创建为本地二级索引的问题注解驱动的二级索引2.20.86无参createTable现在会考虑注解声明的二级索引社区贡献 breader124StreamSpecification2.20.94CreateTableEnhancedRequest支持配置表流规格社区贡献 acouvreur。5.4 原子计数器扩展默认行为变更2.20.1322.20.1322023-08-22改变了 DynamoDB Enhanced 原子计数器扩展atomic counter extension的默认行为自动过滤待更新条目中的计数器属性使用户可以直接读取并更新条目而不触发 DynamoDB 冲突错误。若你的代码依赖旧行为手动排除计数器字段升级后应删除手动过滤逻辑。5.5 转换器与序列化细节EnumAttributeConverter#createWithNameAsKeys2.20.87新增基于Enum::namefinal、不可覆盖而非Enum::toString的枚举转换器社区贡献 martinKindallflattened mappers2.20.42属性转换器解析包含 flattened mappers社区贡献 akieslerStaticTableSchema 泛型参数2.20.86静态构建方法支持EnhancedType参数社区贡献 bmaizelsReadBatch/WriteBatch 异常信息2.20.155未设置 mappedTableResourcetable时给出更清晰的异常消息社区贡献 swar8080。六、S3 Transfer Manager 修复S3 Transfer Managerservices-custom/s3-transfer-manager在 2.20.x 区间主要以下修复为主transferComplete 未回调2.20.152修复AsyncRequestBody.fromFile()场景下transferComplete()不触发的 3839 号问题SSE-C 参数丢失2.20.109多部分复制转换时 SSE-C 参数未复制到CompleteMultipartUpload请求的问题已修复CRT 类误加载2.20.68使用 Java 版 S3 客户端时不再尝试加载 CRT 类issue #3936CRT 上传路径直传2.20.146CRT 客户端上传通过直接传递 requestPath 减少不必要的文件 I/O。七、HTTP 客户端与传输层修复Netty 非阻塞 DNS2.20.83NettyNioAsyncHttpClient新增可配置的非阻塞 DNS 解析策略默认仍为InetAddress.getByName阻塞解析社区贡献 martinKindallNetty ByteBuffer 位置2.20.107修复NettyNioAsyncHttpClient未尊重请求 ByteBuffer 位置的问题Netty Content-Length 校验2.20.32修复校验失败后连接悬挂占用连接池的问题Apache 连接泄漏2.20.83修复线程在 HTTP 连接进行中被中断时租用连接泄漏的问题CRT 连接池指标2.20.52修复 AWS CRT HTTP 客户端不上报连接池指标的问题CRT SigV4a 路径规范化2.20.150不再让 CRT SigV4a 签名器做路径规范化避免签名不匹配CRT 版本升级2.20.79AWS CRT 依赖升级到 v0.21.17。八、社区贡献者该区间内被官方致谢的社区贡献者包括swar8080、graebm、deki、faucct、psnilesh、StephenFlavin、jensim、flittev、martinKindall、breader124、bmaizels、acouvreur、akiesler、sugmanue、mpdn、scrocquesel、paulolieuthier、stevenshan 等。其中 martinKindall 在 Netty DNS、枚举转换、原生构建 STS 支持等多个领域均有贡献是 2.20.x 区间最活跃的外部参与者之一。九、升级到 2.20.x 的实践建议版本选取除非需要 2.20.x 中某个特定能力如跨区域 S3、Enhanced Document API、JDK 21 构建支持建议直接升级到 2.20.162区间内最后版本以获取全部修复依赖管理通过 BOM 引入避免逐个管理各模块版本dependencyManagement dependencies dependency groupIdsoftware.amazon.awssdk/groupId artifactIdbom/artifactId version2.20.162/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement升级关注点重点检查 DynamoDB Enhanced 原子计数器默认行为变更2.20.132、S3CrtAsyncClientBuilder新增方法对既有构建链的影响、以及ServiceClientConfiguration引入后是否影响自定义装饰器验证在仓库根目录执行./mvnw -pl services/s3 -am test可对 S3 模块运行单元测试集成测试位于 services/s3/src/it需要真实 AWS 凭据见 buildspecs 中的 CI 配置生产环境升级前务必跑通业务回归。十、小结2.20.x 揭示的演进方向纵观 2.20.x 全区间可以清晰看到 AWS SDK for Java v2 在 2023 年的几条主线构建与运行时现代化JDK 21 支持、Jackson 2.15.2、CRT 依赖持续升级S3 场景深化跨区域访问、CRT 客户端配置闭环、多部分传输细节打磨DynamoDB 增强体验文档 API、容量可见性、建表与索引正确性修复可观测性与可靠性SERVICE_ENDPOINT、ErrorType指标线程池与连接池泄漏修复社区协作常态化每个版本几乎都包含外部贡献且贡献集中在 Netty 客户端、DynamoDB Enhanced 等开源友好模块。对于正在使用 2.20.x 的开发者本文所列各条目对应的源码位置services/s3、services-custom/dynamodb-enhanced、http-clients可作为继续深入阅读的起点完整的逐版本记录可随时回查 changelogs/2.20.x-CHANGELOG.md 原文。版本日期版本日期2.20.02023-02-082.20.812023-06-072.20.12023-02-092.20.822023-06-082.20.22023-02-102.20.832023-06-092.20.32023-02-132.20.842023-06-122.20.42023-02-142.20.852023-06-132.20.52023-02-152.20.862023-06-152.20.62023-02-162.20.872023-06-162.20.72023-02-172.20.882023-06-192.20.82023-02-202.20.892023-06-202.20.92023-02-212.20.902023-06-212.20.102023-02-222.20.912023-06-222.20.112023-02-232.20.922023-06-232.20.122023-02-242.20.932023-06-262.20.132023-02-272.20.942023-06-272.20.142023-02-282.20.952023-06-282.20.152023-03-012.20.962023-06-292.20.162023-03-022.20.972023-06-302.20.172023-03-032.20.982023-07-032.20.182023-03-062.20.992023-07-052.20.192023-03-072.20.1002023-07-062.20.202023-03-082.20.1012023-07-072.20.212023-03-092.20.1022023-07-102.20.222023-03-102.20.1032023-07-132.20.232023-03-132.20.1042023-07-172.20.242023-03-142.20.1052023-07-182.20.252023-03-152.20.1062023-07-192.20.262023-03-162.20.1072023-07-192.20.272023-03-172.20.1082023-07-202.20.282023-03-202.20.1092023-07-212.20.292023-03-212.20.1102023-07-242.20.302023-03-222.20.1112023-07-252.20.312023-03-232.20.1122023-07-262.20.322023-03-242.20.1132023-07-272.20.332023-03-272.20.1142023-07-272.20.342023-03-282.20.1152023-07-282.20.352023-03-292.20.1162023-07-312.20.362023-03-302.20.1172023-08-012.20.372023-03-312.20.1182023-08-022.20.382023-04-032.20.1192023-08-032.20.392023-04-042.20.1202023-08-042.20.402023-04-052.20.1212023-08-072.20.412023-04-062.20.1222023-08-082.20.422023-04-072.20.1232023-08-092.20.432023-04-102.20.1242023-08-102.20.442023-04-112.20.1252023-08-112.20.452023-04-122.20.1262023-08-142.20.462023-04-132.20.1272023-08-152.20.472023-04-142.20.1282023-08-162.20.482023-04-172.20.1292023-08-172.20.492023-04-192.20.1302023-08-182.20.502023-04-202.20.1312023-08-212.20.512023-04-212.20.1322023-08-222.20.522023-04-242.20.1332023-08-232.20.532023-04-252.20.1342023-08-242.20.542023-04-262.20.1352023-08-252.20.552023-04-272.20.1362023-08-282.20.562023-04-282.20.1372023-08-292.20.572023-05-012.20.1382023-08-302.20.582023-05-022.20.1392023-08-312.20.592023-05-032.20.1402023-09-012.20.602023-05-042.20.1412023-09-052.20.612023-05-052.20.1422023-09-062.20.622023-05-082.20.1432023-09-072.20.632023-05-092.20.1442023-09-082.20.642023-05-102.20.1452023-09-112.20.652023-05-112.20.1462023-09-122.20.662023-05-152.20.1472023-09-132.20.672023-05-162.20.1482023-09-142.20.682023-05-182.20.1492023-09-152.20.692023-05-192.20.1502023-09-182.20.702023-05-222.20.1512023-09-192.20.712023-05-232.20.1522023-09-202.20.722023-05-242.20.1532023-09-222.20.732023-05-252.20.1542023-09-252.20.742023-05-262.20.1552023-09-262.20.752023-05-302.20.1562023-09-272.20.762023-05-312.20.1572023-09-282.20.772023-06-012.20.1582023-10-022.20.782023-06-022.20.1592023-10-032.20.792023-06-052.20.1602023-10-042.20.802023-06-062.20.1612023-10-052.20.1622023-10-06【免费下载链接】aws-sdk-java-v2The official AWS SDK for Java - Version 2项目地址: https://gitcode.com/GitHub_Trending/aw/aws-sdk-java-v2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表