Quarkus3中StartupEvent方法注入@ConfigMapping报指定异常
问题解决方案
问题原因
Quarkus 3 中,@ConfigMapping 生成的配置 Bean 在 StartupEvent 观察者方法的参数注入场景下,会因 CDI 注入点上下文未完全建立,触发 IllegalStateException: No current injection point found 异常。
可行方案
方案1:手动通过SmallRye Config API获取配置实例
无需依赖CDI注入,直接在观察者方法中通过SmallRye Config的API手动创建MyConfig实例:
import io.quarkus.runtime.StartupEvent; import io.smallrye.config.SmallRyeConfig; import io.smallrye.config.SmallRyeConfigProviderResolver; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.event.Observes; @ApplicationScoped public class Bootstrapper { void onStartup(@Observes StartupEvent startupEvent) { SmallRyeConfig config = SmallRyeConfigProviderResolver.instance() .getConfig(SmallRyeConfig.class); MyConfig myConfig = config.getConfigMapping(MyConfig.class); System.out.println(myConfig); } }
方案2:升级Quarkus版本
Quarkus后续版本(如3.2及以上)修复了@ConfigMapping Bean在事件观察者参数中注入的上下文问题,升级后你原本的代码可以直接正常运行:
void onStartup(@Observes StartupEvent startupEvent, MyConfig myConfig) { System.out.println(myConfig); }
内容的提问来源于stack exchange,提问作者SaulJP
相关产品推荐
相关产品推荐

