开发带定时器触发的Quarkus Azure Function时依赖注入报NPE问题咨询
问题根因
你遇到的空指针异常是因为当前entryPoint配置直接触发普通类方法调用,绕过了Quarkus的CDI容器初始化流程,@Inject 注解标注的BoingService没有被容器实例化和注入,调用时自然为null。移除boingService.sayBoing()调用后没有使用注入Bean,所以不会触发空指针。
解决方案
不需要大幅修改现有逻辑,可选择以下任意一种方案修复:
- 方案一:调整触发入口为Quarkus识别的Function方法
Quarkus Azure Function扩展会自动识别带@FunctionName注解的方法作为触发入口,同时完成CDI上下文初始化。你可以直接修改function.json的entryPoint为标注了@FunctionName的方法:
如果需要调用"entryPoint" : "yoink.BoingService.sayBoing",DoingService的逻辑,直接在BoingService里注入DoingService调用即可,此时所有注入的Bean都会被正常初始化。 - 方案二:保留现有入口,主动从CDI容器获取Bean
如果你要保留DoingService作为入口,可以不用@Inject注入,改为主动从CDI上下文获取已经初始化的Bean实例:import jakarta.enterprise.inject.spi.CDI; @ApplicationScoped public class DoingService { public void sayDoing( ){ BoingService boingService = CDI.current().select(BoingService.class).get(); boingService.sayBoing(); System.out.println("Doiing"); } } - 注意事项:请确认你的项目已经引入了
quarkus-azure-functions扩展依赖,Quarkus会自动适配Azure Function运行时的上下文初始化逻辑,无需额外手动配置容器。
内容的提问来源于stack exchange,提问作者Saitama
相关产品推荐
相关产品推荐

