You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus是否有类似Spring Boot Actuator /beans端点的内置Bean查询功能?

Quarkus等效Spring Boot Actuator /beans端点的功能

好问题!Quarkus确实有对应的便捷功能来查看其托管的CDI Bean,不用完全依赖手动编程注入BeanManager,主要分为两种场景:

1. 开发模式专属:Dev UI(最直观)

当你用./mvnw quarkus:dev或./gradlew quarkusDev启动Quarkus应用时,直接访问http://localhost:8080/q/dev就能进入Quarkus的开发者UI界面。
在这个界面里,找到CDI Beans分类(或者在搜索框直接搜"beans"),就能看到所有Quarkus托管的Bean列表,包括每个Bean的类型、作用域、限定符、依赖关系等详细信息——这和Spring Actuator的/beans端点功能完全等效,而且是可视化的界面,排查问题更方便。

2. 生产环境可用:自定义REST端点

如果你需要在生产环境也能提供类似/beans的端点,可以基于你提到的BeanManager封装一个REST接口,下面是一个完善的示例:

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.enterprise.inject.Any;
import jakarta.enterprise.util.AnnotationLiteral;
import java.util.Set;
import java.util.stream.Collectors;
import jakarta.enterprise.inject.spi.Bean;
import jakarta.enterprise.inject.spi.BeanManager;

@Path("/beans")
@ApplicationScoped
public class BeanListingResource {

    @Inject
    BeanManager beanManager;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Set<String> getAllManagedBeans() {
        // 获取所有带有@Any限定符的Bean(即所有托管Bean)
        Set<Bean<?>> beans = beanManager.getBeans(Object.class, new AnnotationLiteral<Any>() {});
        // 转换为Bean类名的集合返回
        return beans.stream()
                .map(Bean::getBeanClass)
                .map(Class::getName)
                .collect(Collectors.toSet());
    }
}

写完后启动应用,访问http://localhost:8080/beans就能拿到JSON格式的Bean列表。如果需要保护这个端点,还可以搭配quarkus-security扩展添加身份验证,避免未授权访问。

3. 额外说明

Quarkus的官方扩展里没有直接提供和/beans完全一致的内置端点,但Dev UI已经完全覆盖了开发时的需求,自定义端点则能满足生产环境的个性化需求。

内容的提问来源于stack exchange,提问作者Jade Devin Nocum Cabatlao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:06:51