Quarkus注入ConfigProperties对象时遇UnsatisfiedResolutionException问题
解决Quarkus配置映射注入失败问题
核心问题分析
你遇到的javax.enterprise.inject.UnsatisfiedResolutionException错误,主要由两个关键问题导致:
- 使用了错误的配置映射注解
- Service类存在语法错误
修复步骤
1. 替换配置注解为@ConfigMapping
Quarkus官方指南中的配置映射基于SmallRye Config的@ConfigMapping注解,而非@ConfigProperties。@ConfigProperties用于JavaBean风格的配置类,不适用于接口形式的配置聚合。
修改后的LiquidoConfig代码:
import io.smallrye.config.ConfigMapping; @ConfigMapping(prefix = "liquido") public interface LiquidoConfig { String frontendUrl(); int loginLinkExpirationHours(); Jwt jwt(); interface Jwt { String secret(); Long expirationSecs(); } }
2. 修复Service类的语法错误
你的SomeService类定义存在语法错误,将class误写为void,导致CDI容器无法识别该Bean,进而无法完成注入。修正后的代码:
import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; @ApplicationScoped public class SomeService { @Inject LiquidoConfig config; }
3. 验证配置文件
确保application.properties或application.yml中存在对应配置项,配置名使用kebab-case格式,会自动与接口中的camelCase方法映射:
# application.properties示例 liquido.frontend-url=http://your-frontend-domain.com liquido.login-link-expiration-hours=24 liquido.jwt.secret=your-jwt-secret-key liquido.jwt.expiration-secs=3600
4. 重新构建项目
Quarkus需要为配置接口生成代理类,执行以下命令重新编译运行:
./mvnw clean compile quarkus:dev
额外注意事项
- 无需为
LiquidoConfig添加@ApplicationScoped或@StaticInitSafe注解,配置映射由SmallRye Config负责管理,CDI会自动识别。 - 确保项目依赖中包含SmallRye Config相关模块(Quarkus默认已集成,无需额外添加)。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

