Quarkus HTTP Lambda项目DynamoDB相关application.yml配置不识别问题
问题根因
1. 配置无法识别的原因
Quarkus 提供的 quarkus.dynamodb.* 系列配置项,是由官方扩展 quarkus-amazon-dynamodb 负责解析加载的,你当前只引入了原生 AWS SDK 的 dynamodb 依赖,没有引入 Quarkus 对应的 DynamoDB 扩展,所以 Quarkus 无法识别这些配置前缀,会抛出未识别配置的警告。
你能通过 @ConfigProperty 读取到配置是因为 Quarkus 全局配置系统会加载所有配置文件中的键值,只是这些配置没有对应扩展处理,无法自动注入到 DynamoDB 客户端中。
2. 安全令牌无效报错的原因
你手动构建 DynamoDbClient 时,没有配置 endpointOverride 指向本地 http://localhost:8000 地址,也没有传入静态凭证,客户端会默认请求公网 AWS DynamoDB 服务,你配置的本地测试凭证对公网 AWS 服务无效,因此返回400错误。
解决方案
- 在
pom.xml中新增 Quarkus DynamoDB 扩展依赖:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-amazon-dynamodb</artifactId> </dependency>
- 修改业务代码,删除手动构建
DynamoDbClient的逻辑,直接通过 CDI 注入 Quarkus 扩展自动初始化好的客户端,扩展会自动读取你application.yml中的所有配置完成初始化:
package com.dteam.service; import com.dteam.model.Account; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.TableSchema; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.transaction.Transactional; @Transactional @ApplicationScoped public class AccountService { // 直接注入Quarkus自动初始化好的增强客户端 @Inject DynamoDbEnhancedClient enhancedClient; public void createNewAccount() { Account acc = new Account(); acc.setEmail("example@mail.com"); acc.setFirstName("Peter"); acc.setLastName("Peterson"); DynamoDbTable<Account> accTable = enhancedClient.table("Account", TableSchema.fromBean(Account.class)); accTable.putItem(acc); } }
内容的提问来源于stack exchange,提问作者pavlee
相关产品推荐
相关产品推荐

