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

如何为Spring Boot Admin添加自定义Actuator端点至新标签页?求参考示例

嘿,这个需求我刚好折腾过,给你梳理下靠谱的实现方式,附带具体示例,绝对比找那个停用的applications-activiti组件管用~

核心实现步骤:客户端注册自定义端点 + 服务器端扩展SBA UI

一、客户端侧:注册并暴露自定义Actuator端点

首先得确保你的自定义端点能被Actuator正常对外提供服务:

  1. 编写自定义端点类
    用Spring Boot的@Endpoint注解创建你的自定义端点,添加需要的操作(比如@ReadOperation用于GET请求):
@Endpoint(id = "custom-business")
public class CustomBusinessEndpoint {

    @ReadOperation
    public Map<String, Object> getBusinessMetrics() {
        Map<String, Object> metrics = new HashMap<>();
        metrics.put("online-users", 156);
        metrics.put("pending-orders", 23);
        metrics.put("system-load", 0.78);
        metrics.put("last-refresh", LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
        return metrics;
    }
}
  1. 注册为Bean并暴露
    把这个端点类注册成Spring Bean,然后在配置文件里暴露它:
@Configuration
public class ActuatorConfig {
    @Bean
    public CustomBusinessEndpoint customBusinessEndpoint() {
        return new CustomBusinessEndpoint();
    }
}

在application.properties里添加:

# 暴露自定义端点,同时保留默认的健康、信息端点
management.endpoints.web.exposure.include=health,info,custom-business

二、服务器侧:给SBA添加新标签页

现在官方推荐用通用的UI扩展机制,替代了旧的applications-activiti这类特定组件,下面两种方式任选:

方式1:轻量快速实现(直接展示JSON)

适合只需要查看端点数据,不需要定制UI的场景:

  1. 引入SBA UI自定义器依赖(Maven为例)
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui</artifactId>
</dependency>
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui-customizer</artifactId>
</dependency>
  1. 创建UI配置类,添加新标签页
import de.codecentric.boot.admin.server.ui.config.AdminServerUiCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SbaUiExtensionConfig {

    @Bean
    public AdminServerUiCustomizer customTabCustomizer() {
        return ui -> {
            // 参数分别是:视图ID、标签显示名称、图标(用Font Awesome图标名)、端点路径
            ui.addView("custom-business", "业务监控", "icon-bar-chart", "/instances/{id}/actuator/custom-business");
        };
    }
}

重启SBA服务器后,进入任意应用的详情页,就能看到新增的「业务监控」标签,点击直接展示自定义端点返回的JSON数据。

方式2:定制化UI展示(美化页面)

如果想要更友好的展示效果,比如表格、卡片样式,可以自定义Thymeleaf模板:

  1. 创建自定义模板文件
    在SBA服务器项目的src/main/resources/META-INF/spring-boot-admin-server-ui/views/目录下创建custom-business.html:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>业务监控</title>
    <th:block th:replace="fragments/header :: header"/>
</head>
<body>
<div class="container-fluid">
    <th:block th:replace="fragments/navigation :: navigation"/>
    <div class="row mt-4">
        <div class="col-md-3 mb-3">
            <div class="card text-center">
                <div class="card-header bg-primary text-white">在线用户数</div>
                <div class="card-body">
                    <h3 th:text="${businessMetrics['online-users']}"></h3>
                </div>
            </div>
        </div>
        <div class="col-md-3 mb-3">
            <div class="card text-center">
                <div class="card-header bg-warning text-white">待处理订单</div>
                <div class="card-body">
                    <h3 th:text="${businessMetrics['pending-orders']}"></h3>
                </div>
            </div>
        </div>
        <div class="col-md-3 mb-3">
            <div class="card text-center">
                <div class="card-header bg-info text-white">系统负载</div>
                <div class="card-body">
                    <h3 th:text="${businessMetrics['system-load']}"></h3>
                </div>
            </div>
        </div>
        <div class="col-md-3 mb-3">
            <div class="card text-center">
                <div class="card-header bg-secondary text-white">最后刷新时间</div>
                <div class="card-body">
                    <p th:text="${businessMetrics['last-refresh']}"></p>
                </div>
            </div>
        </div>
    </div>
</div>
<th:block th:replace="fragments/footer :: footer"/>
</body>
</html>
  1. 创建控制器处理视图请求
    编写一个控制器,从应用的Actuator端点获取数据,传递给模板:
import de.codecentric.boot.admin.server.domain.entities.Instance;
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.client.RestTemplate;

@Controller
public class CustomBusinessViewController {

    private final InstanceRepository instanceRepository;
    private final RestTemplate restTemplate;

    public CustomBusinessViewController(InstanceRepository instanceRepository, RestTemplate restTemplate) {
        this.instanceRepository = instanceRepository;
        this.restTemplate = restTemplate;
    }

    @GetMapping("/instances/{id}/custom-business")
    public String showBusinessMetrics(@PathVariable String id, Model model) {
        // 从SBA的实例仓库获取目标应用的Actuator基础URL
        Instance instance = instanceRepository.findById(id)
                .orElseThrow(() -> new IllegalArgumentException("实例不存在:" + id));
        String actuatorBaseUrl = instance.getRegistration().getServiceUrl() + "/actuator";
        String customEndpointUrl = actuatorBaseUrl + "/custom-business";

        // 请求自定义端点获取数据
        Map<String, Object> businessMetrics = restTemplate.getForObject(customEndpointUrl, Map.class);
        model.addAttribute("businessMetrics", businessMetrics);

        return "custom-business";
    }
}
  1. 修改UI配置里的路径
    把之前AdminServerUiCustomizer里的路径改成控制器的路径:
ui.addView("custom-business", "业务监控", "icon-bar-chart", "/instances/{id}/custom-business");

重启后,点击标签页就能看到美化后的业务监控页面了。

靠谱的参考资料

  • Spring Boot Admin官方文档的「Customizing the UI」章节,详细讲解了所有UI扩展方式,包括添加视图、自定义模板、扩展静态资源等。
  • 官方GitHub仓库里的spring-boot-admin-samples模块,其中spring-boot-admin-sample-custom-ui是专门的自定义UI示例,完全贴合你的需求,可以直接参考代码。

补充:那个applications-activiti确实是旧版本的特定组件,现在已经被官方的通用扩展机制替代了,上面的方案都是官方维护的,不会有停用风险。

内容的提问来源于stack exchange,提问作者Varesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:30:41